多语言iOS应用程序

时间:2012-06-19 10:57:38

标签: iphone ios localization internationalization

现在,在本地化的标准行为中,iOS确定当前设置的iPhone语言,并使用Localizable.strings文件设置相应的文本。

但是,我的客户端需要一个多语言iOS应用程序,其中语言在应用程序中设置,独立于本机iOS首选语言。即,应用程序可能与iOS目前在iPhone上设置的语言不同。

有任何关于如何实施此方案的想法吗?

我的想法:

  • 我可以创建一个类似于NSLocalizeString和其中的硬代码字符串的自定义静态类,并返回适当的语言字符串和应用程序中设置的语言,如果这是一个可能的解决方案,那么有关如何构造该类的任何建议)< / LI>

4 个答案:

答案 0 :(得分:4)

你可以:

  1. 将翻译字符串存储在每种语言的.plist文件(string_key / translation)中;

  2. 在NSDictionary中阅读相应的plist(取决于当前设置的语言);

  3. 访问要显示的每个字符串的字典(就像使用NSLocalizeString一样)。

答案 1 :(得分:1)

我曾经不得不创建一个flashchards应用程序,客户端需要随意更改语言。我现在在我的框中没有它的源代码,但我记得使用这个tutorial。另请查看他们使用的示例代码。

附注 - 公开诋毁你的客户真是不专业。

答案 2 :(得分:1)

使用所需语言创建plist文件。我使用{LANG} _ {CLASS NAME}和{CLASS NAME}作为所有本地化字符串的默认值。 之后我创建了一个方法来检查是否存在正确的文件,如果丢失则接受或默认,并根据设备语言返回NSDictionary对象,在类init上调用。如果通过将nib名称添加到字符串文件来实现本地化的nib,也可以使用这个想法。

+ (NSDictionary *) getLocalized: (NSString *) contollerName andLang:(NSString *) lang {
    NSString *fullPath = nil;
    // You can use device lang if needed
    NSString * curLang=[[NSLocale preferredLanguages] objectAtIndex:0];
    fullPath = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat:@"%@_%@",contollerName,lang]  ofType: @"plist"];
    if (!fullPath) {
        fullPath = [[NSBundle mainBundle] pathForResource:contollerName ofType:@"plist"];
    }
    return [NSDictionary dictionaryWithContentsOfFile:fullPath];
}

所以,它可以被类似的东西调用:

[tools getLocalized:[Controller.class description] andLang:@"XX"];

答案 3 :(得分:0)

您可以使用标准本地化(.strings文件和本地化.xibs)并强制您的应用使用iOS语言设置以外的语言。有关如何实现此目的的详细信息,请参阅此帖子:Change language of the ios application

请注意,如果您(或者更确切地说是您的客户端!)想要在使用应用程序时动态切换语言,那将会更复杂 - 您需要实现某种刷新功能并确保重新加载xib

相关问题