版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.05.12 |
前言
很多APP都有国际化版本,常见于一些大公司的产品,比如Facebook、Wechat等,那么国际化需要我们APP做哪些更改呢,接下来这几篇就一起来看一下APP的国际化和本地化。感兴趣的可以看上面几篇。
1. App的国际化和本地化(一) —— 简单介绍(一)
2. App的国际化和本地化(二) —— 查看语言和区域设置(一)
3. App的国际化和本地化(三) —— 国际化用户界面(一)
4. App的国际化和本地化(四) —— 国际化代码(一)
5. App的国际化和本地化(五) —— 使用区域设置格式化数据(一)
6. App的国际化和本地化(六) —— 支持从右到左的语言(一)
回顾
上一篇主要介绍支持从右到左的语言,本篇主要介绍本地化你的App。
Localizing Your App - 本地化你的App
当您完成应用程序国际化的用户界面和代码后,开始本地化过程。 将包含面向用户的文本的所有开发语言字符串文件导出为XML Localization Interchange File Format(XLIFF)
。 将XLIFF文件提交给本地化团队,以翻译成多种语言。 在等待翻译的同时继续开发您的应用。 将XLIFF
翻译导入到项目中并使用您添加的每种语言测试应用程序。 根据需要重复该过程,仅翻译每个应用修订版之间的更改。 根据需要,自己执行其他本地化步骤。
Choosing Languages - 选择语言
您可以选择超过100种不同的语言和地区指定的方言来本地化您的应用。但是,您使本地化资源越通用,您使用一组资源支持的区域越多。这可以节省应用程序包中的大量空间,并有助于降低本地化成本。例如,如果您不需要区分使用英语的不同地区,则可以添加英语来支持美国,英国和澳大利亚的用户。即使您提供特定于地区的资源,也要始终为您支持的所有语言提供一套完整的特定于语言的资源。
在搜索资源时,bundle API尝试查找应用程序支持的语言与用户的语言和区域设置之间的最佳匹配。在特定于语言的资源文件夹之前搜索特定于区域的资源文件夹。例如,如果您将英语(美国),英语(英国)和英语(澳大利亚)添加到您的项目中,那么包API将首先搜索相应的特定于区域的文件夹,然后搜索英文语言文件夹。有关bundle API如何查找本地化资源的更多信息,请参阅Bundle Programming Guide中的The Bundle Search Pattern。
如果您不确定要添加什么语言,请考虑您在iTunes Connect中选择的App Store区域中使用的主要语言,以推广您的应用。 App Store Territories
在iTunes Connect Developer Guide
的App Store区域中列出。
Locking Views - 锁定视图
在Interface Builder
中,锁定您在等待翻译时不希望意外更改的视图。 当视图被锁定时,不能在检查器或项目编辑器中更改其某些或全部属性。 您可以通过选择锁定级别来指定要锁定的属性集(请参阅表6-1)。
您可以为单个视图或整个nib文件设置锁定属性。 默认情况下,视图从它们的父视图继承它们的锁定属性,并且顶级视图从.storyboard
或.xib
文件继承它们的锁定属性。 如果您设置视图的锁定属性,它将为其所有子视图设置锁定属性。
To change the locking level of a view - 要更改视图的锁定级别
- 在
Interface Builder
中,选择您要锁定的视图。 - 在
Identity inspector
(位于Document
部分中)中,从Lock弹出式菜单中选择锁定级别。
有关该菜单中锁定选项的说明,请参阅表6-1。要从其父视图获取锁定值,请选择“继承”。
例如,选择Localizable Properties
以继续开发您的应用程序,同时等待nib或字符串文件进行本地化。如果您将翻译合并到nib文件中,并且不想无意中进行其他更改,请选择Non-localizable Properties
。
To change the locking level of the nib file - 要更改nib文件的锁定级别
- 在项目导航器中,选择一个
.storyboard
或.xib
文件。 - 从
Editor > Localization Locking
菜单中选择一个锁定级别。
有关该菜单中锁定选项的说明,请参阅表6-1。要解锁文件中的所有视图,请选择Reset Locking Controls
。
例如,要防止对影响本地化字符串文件的nib文件进行任何编辑,请选择Reset Locking Controls
,然后选择Localizable Properties
。
Exporting Localizations - 导出本地化
将开发语言资源导出为XLIFF
文件,并将其提交给本地化团队以翻译成多种语言。
第一次导出本地化时,项目文件夹中只存在base internationalization
- .storyboard
和.xib
资源文件。 Xcode从您的项目文件生成字符串文件,并将其包含在导出的.xliff文件中。直到稍后导入本地化之后,Xcode才会将字符串文件添加到项目中。导出的[Language ID].xliff
文件以XML Localization Interchange File Format(XLIFF)
对字符串文件进行编码。 (大多数第三方本地化工具都支持XLIFF文件格式。)例如,如果开发语言是英语,则en.xliff
文件包含base internationalization
字符串文件(每个.storyboard
和.xib
文件一个文件),一个Localizable.strings
文件和InfoPlist.strings
文件。字符串文件中的源文本是英文的。
译员应该为每种语言返回一个单独的.xliff
文件。这些文件应该使用语言ID作为前缀。例如,如果您要求将en.xliff
的英文翻译成德语和俄语,则返回的文件应该命名为德语为de.xliff
,俄语为ru.xliff
。单个.xliff文件包含实际的翻译。
本地化您的应用的第一步是导出开发语言或基本本地化翻译。在此之前,请验证Info.plist文件中的开发语言版权声明是否正确。 Xcode在XLIFF
文件中包含人类可读的版权声明。有关可本地化Info.plist
键的完整列表,请参阅Locking Views。
To export the development language translation - 导出开发语言翻译
- 在Xcode项目编辑器中,选择项目或目标。
- 选择
Editor > Export
为本地化。 - 在出现的工作表中,在
Save As field
中输入一个位置并单击保存。
Xcode将文件保存到您用.xliff
扩展名指定的位置。 Xcode创建文件夹(如果它不存在),并在Language ID
是开发语言标识符的文件夹中放置名为[Language ID] .xliff
的文件。例如,如果开发语言是英语,则文件名为en.xliff
。
如果您从未在您的项目中添加过语言,则导出对话框与此截图类似:
下次您导出本地化时,可选择导出开发语言资源,特定语言资源或所有语言资源。
To export multiple localizations for translation - 导出多个本地化进行翻译
- 在Xcode项目编辑器中,选择项目或目标。
- 选择
Editor > Export
为本地化。 - 在出现的工作表中,在另存为字段中输入一个位置。
如果您在项目中添加了语言,则导出对话框与此屏幕截图类似:
- 从
Include
弹出菜单中,选择Existing Translations
或Development Language Only
。
要导出全部或特定语言资源,请选择Existing Translations
,然后在下面的Languages
部分中取消选择不想包含在导出中的语言。 要导出开发语言资源,请选择Development Language Only
。
- 点击保存。
对于您选择的每种语言,Xcode将XLIFF文件(具有language ID
前缀和.xliff
扩展名的文件)保存到您在另存为字段中指定的位置。 例如,如果从语言列表中选择德语和法语,则Xcode会将一个de.xliff
和fr.xliff
文件添加到该文件夹中。
Importing Localizations - 导入本地化
当您导入本地化时,Xcode会将该语言的语言和一组本地化字符串文件添加到项目中。 例如,如果您在包含目标语言属性的标准XML Localization Interchange File Format (XLIFF)
中导入ru.xliff
,则俄语将添加到项目中。 第一次导入本地化时,base internationalization
文件将更改为项目导航器中包含字符串文件的组。 Xcode将语言特定的字符串文件存储在语言文件夹中。 例如,Xcode在项目文件夹中创建一个ru.lproj
文件夹,并将Localizable.strings
和InfoPlist.strings
文件的本地化副本添加到ru.lproj
文件夹。 本地化的字符串文件是从相应的[Language ID] .xliff
文件中提取的。 下次您导入本地化时,字符串文件将与您现有的项目文件合并。
To import localizations from translators - 从翻译者导入本地化信息
- 在Xcode项目编辑器中,选择项目或目标。
- 选择
Editor > Import Localizations
。 - 在出现的工作表中,选择一个扩展名为
.xliff
的文件并单击打开。
出现一张表格,显示导入的XLIFF
文件与项目文件夹中现有资源之间的差异。
- 点击导入。
Xcode从XLIFF
文件解码本地化的字符串文件,并将它们添加到项目文件夹中。 Xcode替换现有的字符串文件。
1. Verifying Your Steps - 验证你的步骤
导入本地化后,Xcode会更新项目导航器以显示新的语言特定资源。 本地化.storyboard
和.xib
文件现在在项目导航器中显示为组。 单击.storyboard
或.xib
文件旁边的显示三角形以显示基本资源和特定于语言的字符串文件。
选择一个字符串文件来查看和可选地编辑内容。 字符串文件包含Xcode从它在相应的.storyboard
或.xib
文件中找到的文本自动生成的键值对。 如果您在代码中使用NSLocalizedString
宏,如Separating User-Facing Text from Your Code中所述,Localizable.strings
组也会出现在项目导航器中。
另一种字符串文件是InfoPlist.strings
,它用于本地化用户可见的应用程序属性(例如应用程序的名称)。 对于可以在InfoPlist.strings
文件中本地化的键,请阅读Locking Views。
Exporting and Importing Localizations Using Command-Line Utilities - 使用命令行实用程序导出和导入本地化
或者,您可以使用xcodebuild
命令行实用程序来导出和导入本地化。
要导出本地化,请在终端中输入此命令,替换<dirpath>
和<projectname>
参数:
xcodebuild -exportLocalizations -localizationPath <dirpath> -project <projectname> [[-exportLanguage <targetlanguage>]]
导出的XLIFF
文件放置在<dirpath>
中。 (可选)使用exportLanguage
参数来导出其他本地化。
要导入本地化,请在终端中输入此命令,替换<filepath>
和<projectname>
参数:
xcodebuild -importLocalizations -localizationPath <filepath> -project <projectname>
这里,<filepath> 指的是单个的XLIFF
文件。
Adding Additional Resources You Want to Localize - 添加您想要本地化的其他资源
您可以明确地将语言特定的资源文件添加到您的项目中。 例如,由于文化差异,您可能希望针对不同的语言和方言使用不同的图像和音频文件集。 在运行时,应用程序会base文件夹之前搜索特定于语言的文件夹以查找资源文件,以便您可以根据需要将资源添加到Base.lproj
文件夹,然后添加特定的语言文件夹。
注意:如果语言未显示在项目的“信息”窗格的
Localizations
部分中,请在执行这些步骤之前添加语言,如Using Base Internationalization中所述。
To localize a resource - 定位一个资源
- 在项目导航器中,选择您想要本地化的资源。
- 如有必要,请打开
File inspector
。 - 在本地化部分中,点击本地化按钮。
- 在出现的对话框中,从弹出式菜单中选择一种语言,然后单击“本地化”按钮。例如,如果要为所有语言使用资源文件,请选择
Base
。
在本地化资源之后,您可以使用文件检查器将其添加到其他语言。
To add localizations to a resource - 将本地化添加到资源
- 在文件检查器打开的项目导航器中,选择资源。
- 在本地化部分中,选择您想要添加的其他语言。
Xcode复制相应语言文件夹中的文件,并将其显示在项目导航器中。
Handling Noun Plurals and Units of Measurement - 处理名词复数和测量单位
如果一个字符串包含名词复数或度量单位,则为具有不同复数规则的语言提供备用字符串。要指定不能由字符串文件中的键值对表示的语言复数规则,请使用.stringsdict
文件,该文件是具有.stringsdict
文件扩展名的XML属性列表。语言在处理复数名词或度量单位方面有所不同。一些语言具有单一形式,一些具有两种类别,而另一些具有三种或更多类别来表示数量。如果显示包含变量数量的格式化字符串,则可以在代码中使用一个字符串,该字符串使用.stringsdict
文件中指定的复数规则进行本地化。
与您如何从字符串文件中检索本地化文本类似,使用代码中的NSLocalizedString
宏可从.stringsdict
文件中检索不同复数形式的格式字符串。接下来,为具有不同复数规则的所有受支持语言提供一个本地化的.stringsdict
文件。 NSLocalizedString
宏在具有相同文件名前缀的关联字符串文件之前搜索现有的.stringsdict
文件。例如,宏将首先搜索Localizable.stringsdict
文件中的%d file(s) remaining
个key。如果找不到,则宏将在Localizable.strings
文件中搜索该键。因此,只能为具有不同复数规则的语言添加.stringsdict
文件。
To create language plural rules - 创建语言复数规则
- 在你的代码中,使用一个
NSLocalizedString
宏,传递一个格式化的字符串来检索复数短语。例如,要将可变数量的文件显示为文本:
localizedString = [NSString localizedStringWithFormat:NSLocalizedString(@"%d file(s) remaining", @"Message shown for remaining files"), count];
将格式字符串作为key参数传递给NSLocalizedString
宏。
- 要为每种语言创建
Localizable.strings
文件,请导出和导入本地化,如Exporting Localizations和Importing Localizations中所述。
Xcode从代码中的NSLocalizedString
宏中生成一个Localizable.strings
文件。 例如,这个键值对以前面的代码片段的开发语言Localizable.strings
出现:
/* Message shown for remaining files */
"%d file(s) remaining" = "%d file(s) remaining";
或者,您可以自己创建开发语言Localizable.strings
文件,如 Creating Strings Files for User-Facing Text in Your Code中所述。
- 创建一个
.stringsdict
属性列表文件并为具有不同复数规则的每种语言进行本地化。
将一个属性列表文件添加到项目中(选择File> New> File
并从表中选择Property List
)。 在项目导航器中,将文件名更改为Localizable.stringsdict
并以选定语言对其进行本地化,如 Adding Additional Resources You Want to Localize中所述。
- 为每个
.stringsdict
文件添加语言特定的复数规则。
.stringsdict
文件包含每个短语的复数规则集合。 顶级密钥与您在代码中传递给NSLocalizedString
宏的密钥相同。 此键的值是一个指定复数规则详细信息的字典。 该字典包含用于每个数字类别的文本。 类别和含义的类型因语言而异。
例如,%d file(s) remaining
关键字的英文.stringsdict
文件是:
<plist version="1.0">
<dict>
<key>%d file(s) remaining</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
<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>
</dict>
</dict>
</plist>
在英语中,一个类别用于数字1,而另一个类别用于所有其他英文数字。
%d file(s) remaining
的俄文.stringsdict
文件是:
<plist version="1.0">
<dict>
<key>%d file(s) remaining</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Остался %d файл</string>
<key>many</key>
<string>Осталось %d файлов</string>
<key>other</key>
<string>Осталось %d файла</string>
</dict>
</dict>
</dict>
</plist>
- 用多种语言测试复数规则。
按照Testing Specific Languages and Regions中的步骤,使用不同的语言设置在Xcode中运行应用程序。
例如,以上关于%d file(s) remaining
关键字的英文复数规则应导致以下本地化字符串:
对于俄语,有三种不同格式的可能类别:
有关.stringsdict
文件属性的完整说明,请阅读Stringsdict File Format。 有关每种语言的复数类别和规则,请参阅CLDR Language Plural Rules
视频:WWDC 2013 Making Your App World-Ready: Localization > Using stringsdict
Localizing the Information Property List Files - 本地化信息属性列表文件
当您导出本地化时,Xcode包含一个InfoPlist.strings文件以供翻译。 但是,此文件包含有关您的应用和公司的属性,因此您可能需要自行验证或翻译此文件。 该字符串文件允许您可以选择本地化信息属性列表中的某些属性值,例如应用程序名称(包显示名称)和版权声明。
Xcode自动将这些密钥添加到InfoPlist.strings
文件中
有关信息属性列表的完整说明,请阅读Information Property List Key Reference。
1. Localizing the App Name and Copyright Notice - 本地化应用程序名称和版权声明
要本地化应用程序名称和版权声明,请将CFBundleDisplayName和NSHumanReadableCopyright键的值添加到InfoPlist.strings
文件中。 例如,将这些行添加到项目导航器中的InfoPlist.strings(French)
文件中:
2. Getting the Localized App Name - 获取本地化的应用程序名称
如果您本地化应用程序名称,请在菜单项和用户界面中的其他位置使用它。 您可以使用CFBundleDisplayName
键以编程方式获取本地化应用程序名称:
NSString *appName = [[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"CFBundleDisplayName"];
对于Mac应用程序,用户可以在Finder中重命名应用程序,所以使用NSFileManager
类获取应用程序名称:
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *appName = [[NSFileManager defaultManager] displayNameAtPath:bundlePath];
Adding Languages - 添加语言
如果要添加特定于语言的资源(如Adding Additional Resources You Want to Localize所述),请在导入本地化之前将语言添加到项目。 (Xcode会在导入本地化时自动为您的项目添加语言。)例如,在开始本地化所有字符串文件之前,将语言特定的图像和音频文件添加到项目或测试特定于语言的复数规则。
当Xcode为您的项目添加一种语言时,它会创建一个单独的语言文件夹来存储特定于语言的资源。 Xcode为Base.lproj
文件夹中的每个.storyboard
和.xib
文件添加一个字符串文件到语言文件夹。字符串文件与.storyboard
或.xib
文件具有相同的名称,但带有strings
扩展名。例如,如果您有一个名为MyStoryboard.storyboard
的故事板,则生成的字符串文件名为MyStoryboard.strings
。
To add a language to a project - 为项目添加语言
- 在项目导航器中,选择项目(不是目标)并单击信息。
- 在本地化版块中,点击语言列下的添加按钮(+),然后从弹出式菜单中选择您想添加的语言。
菜单项包含语言名称,后面跟着括号中的语言ID,如德语(de),日语(ja)和阿拉伯语(ar)。脚本或方言的菜单项包含括号内的区域,如德语(瑞士)。脚本或方言的语言ID使用子标签,如在pt-PT中,其中pt是葡萄牙语的代码,PT是葡萄牙的代码。例如,在葡萄牙使用pt作为葡萄牙语的语言ID,在巴西使用pt作为葡萄牙语使用的pt-PT作为葡萄牙语的语言ID。其他子菜单(位于列表底部)包含更多语言和方言。
这些相同的语言ID用于相应的.lproj
语言文件夹的名称中,如Choosing Languages中所述。
- 在出现的对话框中,取消选择您不想为此语言本地化的资源文件。
对于文件类型Localizable Strings,Xcode为该资源创建一个字符串文件。如果您希望为该语言维护单独的.storyboard或.xib文件,请从File Types
弹出式菜单中选择资源文件的类型,例如,为Mac故事板文件选择Interface Builder Cocoa Touch Storyboard
。
- 点击完成按钮。
后记
本篇主要讲述了本地化你的App,感兴趣的给个赞或者关注~~~~