Is there a way to set a default language to be used when the device UI language is not supported by an app?
Example: My app is localized into English and German:
// en.lproj:
"POWER_TO_THE_PEOPLE_BTN" = "Power";
"POWER_PLUG_BTN" = "Power";
// de.lproj:
"POWER_TO_THE_PEOPLE_BTN" = "Macht";
"POWER_PLUG_BTN" = "Spannung";
Now, if I run the app on a device with UI language set to Italian
the app will use the key strings POWER_TO_THE_PEOPLE_BTN
and POWER_PLUG_BTN
.
There must be a way to specify a default (fallback) language to be used by the application in such a case.
From the above example it should be clear that using the English string as a key will not work.
The only option I see right now is to use NSLocalizedStringWithDefaultValue
instead of NSLocalizedString
.
To avoid all those lengthy syntax and more having more descriptive var name for translators, I derived my own helper method L()
for translation and falling back to English
NSString * L(NSString * translation_key) {
NSString * s = NSLocalizedString(translation_key, nil);
if (![[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"] && [s isEqualToString:translation_key]) {
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
return s;
}
My Localizable.strings
would look like this
"SOME_ACTION_BUTTON" = "Do action";
So in my code, i would use L(@"SOME_ACTION_BUTTON")
to get the correct string
Though sometime the key is longer than the translation itself HELP_BUTTON_IN_NAV_BAR = 'Help'
but it saves me a lot of time explaining what it is to whoever is helping me doing the translation