【问题标题】:Multilingual iOS App多语言 iOS 应用
【发布时间】:2012-06-19 10:57:38
【问题描述】:

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

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

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

我的想法:

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

【问题讨论】:

标签: iphone ios localization internationalization


【解决方案1】:

你可以:

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

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

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

【讨论】:

  • 很不错的主意.. 但我想知道哪个更好,你的还是 Peter Sarnowski 的??
【解决方案2】:

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

旁注 - 公开诋毁您的客户确实不专业。

【讨论】:

  • 好主意.. 但我想知道哪个更好,你的还是 Sergio 的??
  • 我想这取决于您的需求 - 我可以很容易地看到 Sergio 建议的单一字典方法对于更大的应用程序/语言数量可能很快变得笨拙。但如果你只需要两种语言的几个字符串,那可能会更简单。
【解决方案3】:

使用所需语言创建 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"];

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2016-04-17
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多