ios - 为非标准语言环境本地化应用程序

标签 ios localization internationalization locale icu

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

结果是(就像在 Call 应用程序中一样)“昨天”以英语显示(因为我无法针对特定区域进行本地化,比如 kamba-Kenya),但是日期名称翻译得很好。除了硬编码之外,还有什么办法可以解决这个问题吗?

最佳答案

我怀疑您是否必须为 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 有两个名为 setDoesRelativeDateFormatting 的属性和 doesRelativeDateFormatting这很可能会为您提供那些受支持的语言环境所需的内容。我不是 iOS 开发人员,所以我不能肯定地说。

尽管 data for ka-KE在 CLDR 中可用,但由于 iOS 尚不支持此语言环境,因此您必须通过箍才能使其工作;例如建立ICU适用于 iOS,详见 this answer或使用可用的静态构建 here .

关于ios - 为非标准语言环境本地化应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082495/

相关文章:

php - 用于验证 linux 文件名的正则表达式(多编码)

c++ - VLCKit与iOS项目中的.mm文件冲突

ios - textFieldDidBeginEditing 被过早调用

ios - 适用于 iOS 的 Xcode 本地化 - 法语 (fr) 和法语比利时 (fr-BE) 之间的区别

javascript - 如何在 javascript 文件中使用 resx 文件。 .net 核心 3.1 mvc

internationalization - Gradle 为 i18n 和 PrettyFaces 构建配置文件

spring - 由 : org. springframework.context.NoSuchMessageException 引起:No message found under code

ios - 从 anchor 约束读取 CGFloat

ios - 针对本地通知的个性化操作

java - ResourceBundle [messages] 未找到 MessageSource : Can't find bundle for base name messages