iOS中的Localizable.strings和本地化语言

问题描述:

我正在构建将在未来版本中进行本地化的应用程序,因此我想将其设置为为此做好准备。iOS中的Localizable.strings和本地化语言

目前我只有一种语言(法语),fr.lproj文件夹包含Localizable.strings以及相关键的法语翻译。

问题是如果我将设备设置为英文,我没有收到法文默认翻译,但我看到Keys名称,我在NSLocalizedString中使用。

例如,如果我试图拿到冠军的视图控制器具有:

NSLocalizedStrings(@"viewController_Title",nil); 

视图控制器,用英语设备会显示“viewController_title”作为标题,而如果我设置的法语它工作没有问题。

我该如何处理?

您的项目设置为使用英语作为默认语言。

在您的Info.plist文件中: 将“Localization native development region”设置为法语。

缺失的翻译现在将回到法语而不是英语。

+0

没有改变如果我将本地化本地开发区域设置为法语。我仍然得到钥匙而不是翻译 – MatterGoal

在此字符串文件 “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"); 

注:更改语言类型以编程方式,那么你可以得到各自的本地化字符串。而且本地化的声明必须在相关的字符串文件中。

+0

这是我在我的应用程序中使用的格式。它的工作正常。 – 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");将返回字符串默认语言,在此案例是英文。

Shameless self-citation

正如在其他的答案中提到,默认情况下,英语在语言缺失的情况下使用。 有两个解决方案:英语以及
1.添加本地化字符串文件(具有相同的内容,法国本地化的字符串已经)
2或调用UIApplicationMain

之前加入的main.m主要方法如下代码
//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"]; 
}