@@ -121,6 +121,7 @@ func (l *Localizer) LocalizeMessage(msg *Message) (string, error) {
121
121
// }
122
122
123
123
// LocalizeWithTag returns a localized message and the language tag.
124
+ // It may return a best effort localized message even if an error happens.
124
125
func (l * Localizer ) LocalizeWithTag (lc * LocalizeConfig ) (string , language.Tag , error ) {
125
126
messageID := lc .MessageID
126
127
if lc .DefaultMessage != nil {
@@ -144,16 +145,26 @@ func (l *Localizer) LocalizeWithTag(lc *LocalizeConfig) (string, language.Tag, e
144
145
}
145
146
}
146
147
}
148
+
147
149
tag , template := l .getTemplate (messageID , lc .DefaultMessage )
148
150
if template == nil {
149
151
return "" , language .Und , & MessageNotFoundErr {messageID : messageID }
150
152
}
153
+
151
154
pluralForm := l .pluralForm (tag , operands )
152
155
if pluralForm == plural .Invalid {
153
156
return "" , language .Und , & pluralizeErr {messageID : messageID , tag : tag }
154
157
}
158
+
155
159
msg , err := template .Execute (pluralForm , templateData , lc .Funcs )
156
160
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
+ }
157
168
return "" , language .Und , err
158
169
}
159
170
return msg , tag , nil
0 commit comments