Skip to content

Commit 4269661

Browse files
committed
Fix translation fall backs thanks @lache
1 parent 9b96ed2 commit 4269661

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

server/service/src/localisations.rs

+20-4
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,22 @@ impl Localisations {
7676
let default_namespace = "common".to_string();
7777
let default_language = "en".to_string();
7878

79-
let language = language.to_string();
79+
let language_with_dialect = language.to_string();
80+
// e.g. if language is "en-GB" then base_language is "en"
81+
let base_language = language.split('-').next().unwrap_or(language).to_string();
82+
8083
let namespace = namespace.unwrap_or(default_namespace.clone());
8184

8285
// make cascading array of fallback options:
8386
for (language, namespace, key) in [
8487
// first look for key in nominated namespace
85-
(&language, &namespace, &key),
88+
(&language_with_dialect, &namespace, &key),
8689
// then look for key in common.json
87-
(&language, &default_namespace, &key),
90+
(&language_with_dialect, &default_namespace, &key),
91+
// then look for key in nominated namespace in base lang
92+
(&base_language, &namespace, &key),
93+
// then look for key in common.json in base lang
94+
(&base_language, &default_namespace, &key),
8895
// then look for key in nominated namespace in en
8996
(&default_language, &namespace, &key),
9097
// then look for key in common.json in en
@@ -182,13 +189,22 @@ mod test {
182189
};
183190
let translated_value = localisations.get_translation(args, lang).unwrap();
184191
assert_eq!("fallback wrong key", translated_value);
192+
// // test missing translation in dialect falls back to base language
193+
let args = GetTranslation {
194+
namespace: Some("common".to_string()),
195+
fallback: Some("fallback".to_string()),
196+
key: "button.close".to_string(),
197+
};
198+
let lang = "fr-MISSING_DIALECT";
199+
let translated_value = localisations.get_translation(args, lang).unwrap();
200+
assert_eq!("Fermer", translated_value);
185201
// // test wrong language dir falls back to english translation
186202
let args = GetTranslation {
187203
namespace: Some("common".to_string()),
188204
fallback: Some("fallback wrong key".to_string()),
189205
key: "button.close".to_string(),
190206
};
191-
let lang = "fr-non-existent-lang";
207+
let lang = "non_existent_lang";
192208
let translated_value = localisations.get_translation(args, lang).unwrap();
193209
assert_eq!("Close", translated_value);
194210
// test no translation in namespace falls back to common.json namespace

0 commit comments

Comments
 (0)