本地化iOS应用

众所周知,语言是交流的方法。 通过定位多种语言,我们的应用可以变得更加用户友好,因为用户可以使用默认语言以外的其他本国语言与该应用进行交互。 Apple支持使用String Localization在应用程序中进行多种语言配置

Apple为我们提供了许多关键要素,可帮助我们支持应用程序中的本地化。我们可以处理:

  1. 字符串格式
  2. 字符串中的复数
  3. 字符串中的性别
  4. 大写和小写处理等

中心键组件是宏NSLocalizedString。 这使用NSBundle的localizedStringForKey:value:table:方法。 genstrings工具拾取了此宏,该工具创建了可以转换的字符串文件。 它解析.c和.m源文件,并生成.strings文件,每个唯一的可本地化的字符串键只有一个条目。

我们可以用xcode制作.string文件

xcode->文件->新建->文件…->资源->字符串文件。

.strings文件由一个或多个键值对组成。 例如:

top_label.title =“她的篮子里有10个苹果”

因此,对于不同的语言,此值将与法语中的值不同。我们将为我们的应用程序支持的不同语言创建不同的.strings文件。

top_label.title =“ Elle a 10 pommes dans son panier

要分配此值,我们只需调用method

NSLocalizedString(key, comment) 

例如,如果我们想将此值分配给标签,则只需编写:

label.title = NSLocalizedString(“ top_label.title ”,注释:“ label title text”)

因此,NSLocalizedString宏将处理当前语言,并相应显示key top_label.title的

很多时候,我们遇到了在运行时获取数据的字符串,因为这个问题苹果提供了格式字符串。 例如:

她完成了3项任务中的1项。

我们可以使用以下方法处理此问题:

“ user_task_progress_format” =“她完成了%lu个任务中的%lu个。”;

label.title =字符串(格式:NSLocalizedString(“ user_task_progress_format”,注释:“用户进度”),进度,taskCount)

有关可能的格式,请通过此链接

另一个常见的问题是使用不同语言以不同方式处理复数形式。为此,我们有.stringdict类型文件..stringsdict文件是一个属性列表(plist)文件,它比普通的字符串文件复杂,但作为回报,它允许纠正所有语言中的复数处理,而在我们的代码中没有任何复数逻辑。 样本文件结构:

top_label.title

NSStringLocalizedFormatKey
%#@ noun @邀请%#@ pronoun @派对中的%#@ pers @
个人

NSStringFormatSpecTypeTypeKey
NSStringPluralRuleType
NSStringFormatValueTypeKey
d


没有人
一个

other
%d个人

名词

NSStringFormatSpecTypeTypeKey
NSStringGenderRuleType
NSStringFormatValueTypeTypeKey
d
0

1

代词

NSStringFormatSpecTypeTypeKey
NSStringGenderRuleType
NSStringFormatValueTypeTypeKey
d
0

1
他的

center_label.title

NSStringLocalizedFormatKey
她用英语获得了%#@ marks @
标记

NSStringFormatSpecTypeTypeKey
NSStringPluralRuleType
NSStringFormatValueTypeTypeKey
f
一个
markone

markzero
other
%。2f标记其他

顶级词典的键只是本地化字符串的键。 然后,每个字典都包含NSStringLocalizedFormatKey条目,该条目指定用于此本地化的格式字符串。 为了将不同的值替换为不同的数字,已扩展了格式字符串语法。 因此,我们可以编写%#@ marks @之类的内容,然后为marks键定义一个字典。 在此字典中,我们指定这是一个复数规则(将NSStringFormatSpecTypeKey设置为NSStringPluralRuleType),指定要使用的格式说明符(在本例中为.2f),并为不同的复数变体定义不同的值。 我们可以选择“零”,“一个”,“两个”,“很少”,“许多”和“其他”。 请参阅苹果的指南。

每当需要大写或小写显示给用户的字符串时,都应使用这些NSString方法的本地化版本:lowercaseStringWithLocale:和uppercaseStringWithLocale:。

Apple还帮助格式化数字和日期NSNumberFormatter或NSDateFormatter。

希望大家都喜欢这篇文章。 我试图在本文中介绍有关iOS本地化的所有内容。 如果您发现本文有问题,请随时与我们联系:)。