@@ -121,6 +121,7 @@ func (l *Localizer) LocalizeMessage(msg *Message) (string, error) {
121121// }
122122
123123// LocalizeWithTag returns a localized message and the language tag.
124+ // It may return a best effort localized message even if an error happens.
124125func (l * Localizer ) LocalizeWithTag (lc * LocalizeConfig ) (string , language.Tag , error ) {
125126 messageID := lc .MessageID
126127 if lc .DefaultMessage != nil {
@@ -144,16 +145,26 @@ func (l *Localizer) LocalizeWithTag(lc *LocalizeConfig) (string, language.Tag, e
144145 }
145146 }
146147 }
148+
147149 tag , template := l .getTemplate (messageID , lc .DefaultMessage )
148150 if template == nil {
149151 return "" , language .Und , & MessageNotFoundErr {messageID : messageID }
150152 }
153+
151154 pluralForm := l .pluralForm (tag , operands )
152155 if pluralForm == plural .Invalid {
153156 return "" , language .Und , & pluralizeErr {messageID : messageID , tag : tag }
154157 }
158+
155159 msg , err := template .Execute (pluralForm , templateData , lc .Funcs )
156160 if err != nil {
161+ // Attempt to fallback to "Other" pluralization in case translations are incomplete.
162+ if pluralForm != plural .Other {
163+ msg2 , err2 := template .Execute (plural .Other , templateData , lc .Funcs )
164+ if err2 == nil {
165+ return msg2 , tag , err
166+ }
167+ }
157168 return "" , language .Und , err
158169 }
159170 return msg , tag , nil
0 commit comments