iOS中的Localizable.strings和本地化语言
我正在构建将在未来版本中进行本地化的应用程序,因此我想将其设置为为此做好准备。iOS中的Localizable.strings和本地化语言
目前我只有一种语言(法语),fr.lproj文件夹包含Localizable.strings
以及相关键的法语翻译。
问题是如果我将设备设置为英文,我没有收到法文默认翻译,但我看到Keys
名称,我在NSLocalizedString
中使用。
例如,如果我试图拿到冠军的视图控制器具有:
NSLocalizedStrings(@"viewController_Title",nil);
视图控制器,用英语设备会显示“viewController_title”作为标题,而如果我设置的法语它工作没有问题。
我该如何处理?
您的项目设置为使用英语作为默认语言。
在您的Info.plist文件中: 将“Localization native development region”设置为法语。
缺失的翻译现在将回到法语而不是英语。
在此字符串文件 “Localizable.strings” 需要声明的本地化这样
French.strings
“viewController_Title”= “ViewController_Title_In_Frech”;
English.strings
“viewController_Title”= “ViewController_Title_In_English”;
您需要使用这样的
NSLocalizedStringFromTable本地化的字符串(重点,LanguageType,@ “N/A”)
例如:
NSLocalizedStringFromTable("viewController_Title", English, @"N/A");
注:更改语言类型以编程方式,那么你可以得到各自的本地化字符串。而且本地化的声明必须在相关的字符串文件中。
这是我在我的应用程序中使用的格式。它的工作正常。 – Ganapathy
你的问题是你需要一种语言来回退。 据我所知,在它周围有没有正式的方式,我写的方法是这样的过去:
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;
}
在这种情况下,使用L(@"viewController_Title");
将返回字符串默认语言,在此案例是英文。
正如在其他的答案中提到,默认情况下,英语在语言缺失的情况下使用。 有两个解决方案:英语以及
1.添加本地化字符串文件(具有相同的内容,法国本地化的字符串已经)
2或调用UIApplicationMain
//sets the french as default language
NSArray *lang = [[NSUserDefaults standardUserDefaults] stringArrayForKey:@"AppleLanguages"];
if ([lang count] > 0 && (![[lang objectAtIndex:0] isEqualToString:@"fr"])) {
NSLog(@"language is neither de nor fr. forcing de");
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr", @"en", nil] forKey:@"AppleLanguages"];
}
没有改变如果我将本地化本地开发区域设置为法语。我仍然得到钥匙而不是翻译 – MatterGoal