iOS中的Localizable.strings,而不是本地化语言

时间:2013-12-11 10:36:02

标签: ios localization localizable.strings

我正在构建一个将在未来版本中进行本地化的应用程序,因此我想将其设置为准备就绪。

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

问题在于,如果我将设备设置为英语,我将无法收到法语默认翻译,但我会在Keys中看到NSLocalizedString名称。

例如,如果我尝试使用以下命令获取View Controller的标题:

NSLocalizedStrings(@"viewController_Title",nil);

视图控制器,用于具有英语语言的设备,显示" viewController_title"作为标题,如果我设置法语,它没有问题。

我该如何处理?

4 个答案:

答案 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");将返回默认语言的字符串,在本例中为英语。

Shameless self-citation

答案 2 :(得分:0)

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

在Info.plist文件中: 将“Localization native development region”设置为French。

缺少翻译现在将回归法语而不是英语。

答案 3 :(得分:0)

如其他答案所述,默认情况下,如果语言缺失,则使用英语。 有两种解决方案:
1.为英语添加本地化字符串文件(与法语本地化字符串具有相同的内容)
2.或者在调用UIApplicationMain

之前在main.m的main方法中添加以下代码
//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"];
}