Iphone 多语言iOS应用程序

Iphone 多语言iOS应用程序,iphone,ios,localization,internationalization,Iphone,Ios,Localization,Internationalization,现在,在本地化的标准行为中,iOS确定iPhone当前设置的语言,并使用Localizable.strings文件设置适当的文本 但是,我的客户端需要一个多语言的iOS应用程序,在该应用程序中,语言设置独立于本机iOS首选语言。i、 e.应用程序的语言可能与iPhone上当前设置的iOS不同 有人对如何实施这个场景有什么想法吗 我的想法是: 我可以创建一个类似于NSLocalizeString的自定义静态类,并在该类中创建硬代码字符串,然后在应用程序中返回适当的语言字符串w.r.t语言集,如果

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

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

有人对如何实施这个场景有什么想法吗

我的想法是:

  • 我可以创建一个类似于NSLocalizeString的自定义静态类,并在该类中创建硬代码字符串,然后在应用程序中返回适当的语言字符串w.r.t语言集,如果这是一个可行的解决方案,请提供有关如何构造该类的任何建议)
    • 您可以:

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

    • 阅读NSDictionary中相应的plist(取决于当前设置的语言)

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


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


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

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


      旁注-公开反对你的客户是非常不专业的。

      用所需的语言创建plist文件。我使用{LANG}{classname}和{classname}作为所有本地化字符串的默认值。 之后,我制作了一个方法,检查是否存在正确的文件,如果丢失,则使用它或默认值,并根据设备语言返回一个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"];
      

      回复:“我讨厌我的客户”。我希望你在这个网站上使用的笔名与你的客户知道的不同!关于这种方法的课程和教程可以在这里找到:非常好的主意。。但我不知道哪一个更好,你的还是塞尔吉奥的??我想这取决于你的需要——我很容易看出,塞尔吉奥建议的单一词典方法可能很快会变得难以适应更大的应用程序/更多的语言。但如果你只需要两种语言中的一些字符串,那么可能会更简单。这个主意很好。。但我不知道哪一个更好,你的还是彼得·萨诺夫斯基的??