本地化非标准语言环境的应用程序

时间:2013-04-18 12:05:41

标签: ios localization internationalization locale icu

我正在编写一个应用程序,该应用程序应支持设备上不在可用(40?)语言列表中的语言,但区域格式为。我想本地化天的名称以及“昨天......”。问题是,使用NSLocale提取天数(星期一,...),因此可以在任何设备上工作,但像“昨天”这样的词必须本地化为40左右的语言。尽管XCode允许我对想要的区域进行本地化,但设备使用的是标准语言,在我的例子中是丹麦语。

结果是(就像在Call应用程序中一样)“昨天”出现在英语中(因为我不能为特定地区本地化,比如kamba-Kenya),但是天名被翻译得很好。除了硬编码之外,有什么方法吗?

1 个答案:

答案 0 :(得分:2)

我怀疑你必须为iOS支持的语言环境硬编码任何这些数据。需要额外的努力才能避免对任何语言环境进行硬编码。

iOS大量使用来自CLDR的区域设置敏感数据并支持您的区域设置,因为这些相对日期名称(这是类别)的翻译,您不必本地化这些字符串CLDR术语中包含诸如“今天”,“昨天”和“明天”之类的单词,planned是区域设置数据的一部分。 example显示德语与英语相比的数据:

<fields>
   ...
   <field type='day'>
    <displayName>Day</displayName>
    <relative type='-1'>Yesterday</relative>
    <relative type='0'>Today</relative>
    <relative type='1'>Tomorrow</relative>
   </field>
   ...
  </fields>
  <fields>
   ...
   <field type='day'>
    <displayName>Tag</displayName>
    <relative type='-2'>Vorgestern</relative>
    <relative type='-1'>Gestern</relative>
    <relative type='0'>Heute</relative>
    <relative type='1'>Morgen</relative>
    <relative type='2'>Übermorgen</relative>
   </field>
   ...
  </fields>

此外,我发现NSDateFormatter有两个名为setDoesRelativeDateFormattingdoesRelativeDateFormatting的属性,这些属性最有可能为您提供所需支持的区域设置。我不是iOS开发人员所以我不能肯定地说。

尽管data for ka-KE在CLDR中可用,但由于iOS尚不支持此区域设置,因此您必须通过环节才能使其正常工作;例如为ICU或使用可用的静态构建this answer详细介绍的iOS版here