版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.05.14 |
前言
很多APP都有国际化版本,常见于一些大公司的产品,比如Facebook、Wechat等,那么国际化需要我们APP做哪些更改呢,接下来这几篇就一起来看一下APP的国际化和本地化。感兴趣的可以看上面几篇。
1. App的国际化和本地化(一) —— 简单介绍(一)
2. App的国际化和本地化(二) —— 查看语言和区域设置(一)
3. App的国际化和本地化(三) —— 国际化用户界面(一)
4. App的国际化和本地化(四) —— 国际化代码(一)
5. App的国际化和本地化(五) —— 使用区域设置格式化数据(一)
6. App的国际化和本地化(六) —— 支持从右到左的语言(一)
7. App的国际化和本地化(七) —— 本地化你的App(一)
8. App的国际化和本地化(八) —— 测试您的国际化应用程序(一)
9. App的国际化和本地化(九) —— 自己管理字符串文件(一)
10. App的国际化和本地化(十) —— 语言和区域ID(一)
回顾
上一篇主要介绍介绍语言和区域ID,本篇主要讲述Stringsdict文件格式。
Stringsdict File Format - Stringsdict文件格式
.stringsdict
文件是用于定义语言复数规则的属性列表。
避免使用带有不包含数字的字符串的.stringsdict
文件,因为语言可能会以不适用于其他类别的方式定义通用单数和复数形式。
Localized String Properties - 本地化的字符串属性
.stringsdict
文件中的每个键值对都定义了特定字符串的复数规则,如下所示:
<plist version="1.0">
<dict>
<key>%d file(s) remaining</key>
<dict>
…
</dict>
<key>%d service hour(s)</key>
<dict>
…
</dict>
<key>%d award(s)</key>
<dict>
…
</dict>
</dict>
</plist>
您将相同的字符串(例如@”%d file(s) remaining”
,@”%d service hour(s)”
和@”%d award(s)
)传递给代码中的NSLocalizedString
宏。
Localized Format String Properties - 本地化格式字符串属性
复数规则确定由NSLocalizedString
宏返回的格式字符串。 您为语言定义的每个数字类别提供格式字符串。 这个词典的值有以下几个键:
NSStringLocalizedFormatKey
包含变量的格式字符串。 变量前面是%#@
个字符,后面跟着@
个字符,如下所示:
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
变量名称是files
。 格式字符串可以包含多个变量,如%#@files@ (%#@bytes@, %#@minutes@)
。
[variable]
指定用于[variable]
的规则的键值对的字典,如下所示:
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d file remaining</string>
<key>other</key>
<string>%d files remaining</string>
</dict>
例如,如果数字为2,则返回@”%d files remaining”
格式字符串,并且本地化字符串变为@”2 files remaining”
。
为出现在NSStringLocalizedFormatKey
格式字符串中的每个变量添加复数规则。
Plural Rule Properties - Plural规则属性
[variable]
字典包含以下键:
-
NSStringFormatSpecTypeKey
- 指定语言规则的类型。唯一可能的值是
NSStringPluralRuleType
,它表示语言复数规则。
- 指定语言规则的类型。唯一可能的值是
-
NSStringFormatValueTypeKey
- 数字的字符串格式说明符,如%d中的整数。有关格式说明符的列表,请参阅String Programming Guide中的String Format Specifiers。
-
zero
- 用于数字0的格式字符串。
-
one
- 用于其他语言相关类别的格式字符串。
-
two
- 用于其他语言相关类别的格式字符串。
-
few, many
- 格式化字符串以用于其他语言相关类别。
-
other
- 用于其他类别未涵盖的所有数字的格式字符串。该key是必需的。
还要注意下面几点:
-
类别的含义取决于语言,并非所有语言都具有相同的类别。
- 例如,英语只使用
one
和other
类别来表示复数形式。阿拉伯语对于zero, one, two, few, many
和other
类别有不同的复数形式。虽然俄语也使用了many
类别,但数量在many
类别中的规则与阿拉伯规则不同。
- 例如,英语只使用
-
除
other
外,所有类别都是可选的。- 但是,如果您没有为所有特定于语言的类别提供规则,则文本在语法上可能不正确。相反,如果您为某种语言未使用的类别提供规则,则会忽略该规则,并使用
other
格式字符串。
- 但是,如果您没有为所有特定于语言的类别提供规则,则文本在语法上可能不正确。相反,如果您为某种语言未使用的类别提供规则,则会忽略该规则,并使用
-
在
zero, one, two, few, many
和other
格式字符串中使用NSStringFormatValueTypeKey
格式说明符是可选的。- 例如,在英语中,
one
格式字符串可以是One file remaining
,而other
格式字符串可以是%d files remaining
。
- 例如,在英语中,
-
使用格式说明符或拼写格式字符串中的数字。
- 如果您在格式字符串中使用数字(如英语中
1 file remaining
),则当用户更改区域时(例如,数字集更改),可能不会进行本地化。相反,请使用格式说明符,如%d file remaining
;否则,拼出数字,如One file remaining
。
- 如果您在格式字符串中使用数字(如英语中
有关每种语言的复数类别和规则,请参阅CLDR Language Plural Rules。
后记
本篇主要讲述了
Stringsdict
文件格式,感兴趣的给个赞或者关注~~~~