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

4
我正在开发一款应用程序,将来会进行本地化,因此我希望将其设置为准备好进行本地化。
目前我只有一种语言(法语),fr.lproj文件夹包含了与相关键对应的法语翻译的Localizable.strings。
问题是,如果我将设备设置为英语,我就无法收到法语默认翻译,而是看到我在NSLocalizedString中使用的Keys名称。
例如,如果我尝试获取视图控制器的标题:
NSLocalizedStrings(@"viewController_Title",nil);

对于英语设备,视图控制器的标题显示为“viewController_title”,而如果我设置为法语语言,它就可以正常工作。

我该怎么处理?

4个回答

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");将返回默认语言的字符串,此时为英语。

不要介意自我引用


1
在这个字符串文件 "Localizable.strings" 中,你需要像这样声明本地化。

French.strings

"viewController_Title" = "法语中的ViewController标题";

English.strings

"viewController_Title" = "ViewController_Title_In_English";

您需要像这样使用本地化字符串

NSLocalizedStringFromTable(Key, LanguageType, @"N/A")

例如:

NSLocalizedStringFromTable("viewController_Title", English, @"N/A");

注意:通过编程更改语言类型,然后您可以获取相应的本地化字符串。相关字符串文件中必须有本地化声明。

这是我在应用程序中使用的格式,它运行良好。 - Ganapathy

0

如其他答案中所述,缺少语言时默认使用英语。 有两种解决方案:
1. 添加英文本地化字符串文件(与法语本地化字符串具有相同的内容)
2. 在 main.m 的 main 方法调用 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"];
}

0

你的项目默认语言为英语。

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

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


如果我将本地化开发区域设置为法语,什么也不会改变。我仍然获得键而不是翻译。 - MatterGoal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接