3

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

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

有人对如何实施此方案有任何想法吗?

我的点子:

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

4 回答 4

4

你可以:

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

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

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

于 2012-06-19T11:03:43.693 回答
2

我曾经不得不创建一个闪存应用程序,而客户需要随意更改语言。我的盒子里现在没有它的源代码,但我记得使用过这个教程。还要检查他们使用的示例代码。

旁注——公开诋毁你的客户真的很不专业。

于 2012-06-19T13:01:41.003 回答
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"];
于 2013-04-06T15:46:55.567 回答
0

您可以使用标准本地化(.strings 文件和本地化 .xibs)并强制您的应用使用 iOS 语言设置以外的语言。有关如何实现这一点的详细信息,请参阅这篇文章:更改 ios 应用程序的语言

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

于 2012-06-19T11:27:06.177 回答