我正在构建一个将在未来版本中进行本地化的应用程序,因此我想将其设置为准备就绪。
目前我只有一种语言(法语),fr.lproj文件夹包含Localizable.strings
,其中包含相关键的法语翻译。
问题在于,如果我将设备设置为英语,我将无法收到法语默认翻译,但我会在Keys
中看到NSLocalizedString
名称。
例如,如果我尝试使用以下命令获取View Controller的标题:
NSLocalizedStrings(@"viewController_Title",nil);
视图控制器,用于具有英语语言的设备,显示" viewController_title"作为标题,如果我设置法语,它没有问题。
我该如何处理?
答案 0 :(得分:1)
在此字符串文件“Localizable.strings”中,您需要像这样声明本地化
<强> French.strings 强>
“viewController_Title”=“ViewController_Title_In_Frech”;
<强> English.strings 强>
“viewController_Title”=“ViewController_Title_In_English”;
您需要使用像这样的本地化字符串
NSLocalizedStringFromTable(Key,LanguageType,@“N / A”)
例如:
NSLocalizedStringFromTable("viewController_Title", English, @"N/A");
注意:以编程方式更改语言类型,然后您可以获取相应的本地化字符串。并且必须在相关的字符串文件中进行本地化声明。
答案 1 :(得分:1)
你的问题是你需要一种语言来回归。 据我所知,没有官方的方法,我过去曾写过这样的方法:
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");
将返回默认语言的字符串,在本例中为英语。
答案 2 :(得分:0)
您的项目设置为使用英语作为默认语言。
在Info.plist文件中: 将“Localization native development region”设置为French。
缺少翻译现在将回归法语而不是英语。
答案 3 :(得分:0)
如其他答案所述,默认情况下,如果语言缺失,则使用英语。
有两种解决方案:
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"];
}