版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.05.13 |
前言
很多APP都有国际化版本,常见于一些大公司的产品,比如Facebook、Wechat等,那么国际化需要我们APP做哪些更改呢,接下来这几篇就一起来看一下APP的国际化和本地化。感兴趣的可以看上面几篇。
1. App的国际化和本地化(一) —— 简单介绍(一)
2. App的国际化和本地化(二) —— 查看语言和区域设置(一)
3. App的国际化和本地化(三) —— 国际化用户界面(一)
4. App的国际化和本地化(四) —— 国际化代码(一)
5. App的国际化和本地化(五) —— 使用区域设置格式化数据(一)
6. App的国际化和本地化(六) —— 支持从右到左的语言(一)
7. App的国际化和本地化(七) —— 本地化你的App(一)
8. App的国际化和本地化(八) —— 测试您的国际化应用程序(一)
回顾
上一篇主要介绍测试您的国际化应用程序,本篇主要介绍自己管理字符串文件。
Managing Strings Files Yourself - 自己管理字符串文件
如果要自行生成并翻译存储在项目文件夹中的字符串文件,请按照本附录中的步骤操作。 在这种情况下,您可以添加要支持的语言,生成字符串文件,并使用AppleGlot
词汇表或其他进程本地化字符串文件。 当您更改用户界面或将面向用户的文本添加到代码中时,您有责任更新字符串文件。
如果要管理自己的字符串文件,请首先将您想支持的语言添加到项目中,如Using Base Internationalization中所述。
重要的事:或者,Xcode会自动生成字符串文件,并将它们添加到项目中,如导出本地化版本,编辑XLIFF文件(其中包含字符串文件)并导入它们,如Localizing Your App中所述。
Viewing Language Folders in the Finder - 在Finder中查看语言文件夹
导入本地化或添加语言后,您可以在Finder中查看不同的语言文件夹。项目导航器中出现在组中的本地化资源位于项目文件夹中的单独语言文件夹中。当您导出和导入本地化时,Xcode会为您管理这些文件夹。要在Finder中查看语言文件夹,按住Control键并点按项目导航器中的项目,然后从快捷菜单中选择Show in Finder
。
项目文件夹应该包含一个名为Base.lproj
的文件夹和其他具有.lproj
扩展名的语言特定的文件夹。语言文件夹的前缀是language ID
,如Language and Locale IDs中所述。
Base.lproj
文件夹包含开发语言中的所有.storyboard
或.xib
文件。添加到项目中的语言文件夹包含项目中每个.storyboard
或.xib
文件的字符串文件。开发语言文件夹不包含.storyboard
和.xib
文件的字符串文件,因为它们不需要开发语言中的翻译。所有语言文件夹都包含一个InfoPlist.strings
文件,用于本地化包的属性,例如应用程序名称。任何其他本地化资源(例如您从代码生成并使用的字符串文件)都会显示在这些语言文件夹中。
例如,对于使用英语作为开发语言的通用iOS应用程序,Base.lproj
文件夹包含Main_iPad.storyboard
和Main.iPhone.storyboard
,而en.lproj
文件夹包含InfoPlist.strings
。如果添加德语,Xcode将创建一个包含InfoPlist.strings
,Main_iPad.strings
和Main_iPhone.strings
文件的de.lproj
文件夹。 de.lproj
文件夹中的文件包含需要翻译为德语的占位符文本。
对于使用英语作为开发语言的Mac应用程序,文件结构可能类似于:
Creating Strings Files for User-Facing Text in Your Code - 为代码中的面向用户的文本创建字符串文件
按照Separating User-Facing Text from Your Code中所述,使用NSLocalizedString
宏替换包含面向用户的文本的字符串后,可以创建并本地化相应的字符串文件。
To create a strings file for user-facing text - 为面向用户的文本创建一个字符串文件
- 使用
genstrings
脚本来创建Localizable.strings
文件的开发语言版本。
在终端中,运行这些命令:
cd [Project folder]
find . -name \*.m | xargs genstrings -o .
对于源文件中每一个NSLocalizedString
宏的出现,脚本都会将注释以键值对(使用该值的占位符文本)添加到Localizable.strings
文件中,如
/* distance for a marathon */
"RunningDistance" = "RunningDistance";
如果在代码中使用NSLocalizedString
宏,则该键的值将默认为该键。 如果您需要不同的行为,请使用Foundation Functions
参考中介绍的采用更多参数的其他NSLocalizedString
宏之一。
- 将
Localizable.strings
文件添加到所有语言文件夹。
将该文件添加到您的Xcode项目中,如Adding Languages中所述。 出现对话框时,不要将Localizable.strings
添加到基本本地化中。
注意:如果Xcode警告您
Localizable.strings
文件看起来是Unicode(UtF-16)
,则可以使用文件检查器将其转换为Unicode(UTF-8)
。 要将文件转换为UTF-8
,请在项目导航器中选择该文件,然后打开文件检查器。 在文本设置部分,从文本编码弹出式菜单中选择Unicode(UTF-8)
。 在出现的对话框中,点击转换。
- 本地化每个语言文件夹中的
Localizable.strings
文件。
例如,在en.lproj / Localizable.strings
文件中,输入RunningDistance
键的英文翻译:
/* distance for a marathon */
"RunningDistance" = "26.22 miles";
在ja.lproj / Localizable.strings
文件中,输入RunningDistance
键的日语翻译:
/* distance for a marathon */
"RunningDistance" = "42.20 キロメートル";
- 如Testing Your Internationalized App中所述,以多种语言测试您的应用程序。
在对代码进行这些类型的更改时逐渐测试您的应用程序。 本地化一组语言文件或使用伪定位技术,如Testing Using Pseudolanguages中所述
Localizing Strings Files - 定位字符串文件
在向项目添加语言时,Xcode将在.storyboard
或.xib
文件中找到的所有面向用户的文本添加到相应的字符串文件中。 Xcode在标识显示文本的视图的每个键值对之前插入注释。 例如,在这个字符串文件的片段中,列标题Location
和文本字段标签Address:
和for:require translation
。
/* Class = "NSTableColumn"; headerCell.title = "Location"; ObjectID = "f0Y-kT-hVz"; */
"f0Y-kT-hVz.headerCell.title" = "Location";
/* Class = "NSTextFieldCell"; title = "Address:"; ObjectID = "gfa-oA-9cr"; */
"gfa-oA-9cr.title" = "Address:";
/* Class = "NSTextFieldCell"; title = "for:"; ObjectID = "gsV-Sg-yiA"; */
"gsV-Sg-yiA.title" = "for:";
genstrings
脚本还会搜索您的代码以获取面向用户的文本,并将其添加到字符串文件中,如 Separating User-Facing Text from Your Code所述。 除了您的代码为翻译员提供注释外,文件格式相同。 要本地化字符串文件,请指示译员使用本地化文本替换占位符文本 - 显示在评论下方等号的右侧。
Localizing Strings Files Using AppleGlot - 使用AppleGlot本地化字符串文件
另一种方案,使用AppleGlot
执行字符串文件的一些初始翻译。例如,使用AppleGlot
根据您在创建项目时选择的模板,将Xcode添加到用户界面的视图的文本本地化。然后,您可以专注于本地化仅添加到用户界面的特定于应用程序的文本。
AppleGlot
是iOS和Mac应用程序开发人员的本地化工具。 AppleGlot提供iOS和Mac语言词汇表来帮助您翻译常用文本字符串。它还可以将面向用户的文本导出为标准格式,本地化人员可以轻松地将其翻译成多种语言。 AppleGlot支持增量开发,因此您只需在每个发行版中将更改转换为用户文本。
要下载AppleGlot和语言词汇表,请转到Build Apps for the World。Under Programming Resources > Downloads
,单击AppleGlot and Localization Glossaries
。如有必要,输入您的Apple ID并单击登录。下载AppleGlot的.dmg
文件以及您支持的语言。要安装AppleGlot
,请打开AppleGlot.dmg
文件并双击AppleGlot.pkg
。
在本地化文件之前,您可以使用AppleGlot
语言词汇表翻译所有常用文本字符串。
To translate your .storyboard and .xib strings files using AppleGlot glossaries - 使用AppleGlot术语表翻译您的.storyboard和.xib字符串文件
- 在终端中,创建一个AppleGlot环境
mkdir [MyAppleGlotEnvironment]
cd [MyAppleGlotEnvironment]
appleglot -w create .
- 设置源语言和目标语言。
appleglot -w setlangs [base_language_id] [target_langauge_id]
例如,如果开发语言是英语且目标是俄语,请将en
传递给base_language_id
,将ru
传递给target_langauge_id
。
- 在Finder中,将语言资源文件夹粘贴到
AppleGlot
环境_NewBase
文件夹中。
如果使用base internationalization
,请将特定于语言的文件夹[target_language_id] .lproj
粘贴到_NewBase
文件夹中,并将文件夹的名称更改为[base_language_id] .lproj
。例如,将ru.lproj
粘贴到_NewBase
中,并将名称更改为en.lproj
。
否则,如果您不使用base internationalization
,[base_language_id] .lproj
文件夹应该包含您想要翻译成目标语言的所有字符串文件。
打开目标语言词汇表
.dmg
,并将词汇表(具有.lg扩展名的文件)复制到_LanguageGlossaries
文件夹中。在终端中,填充
_NewLoc
文件夹。
appleglot -w populate
这将在_ApplicationDictionaries
文件夹中创建一个.ad
文件,其中包含以前翻译的字符串和_WorkGlossary
文件夹中的.wg
文件,该文件夹包含项目中的所有字符串,尽可能多地使用语言词汇表中的所有字符串。
或者,使用支持这些文件格式的第三方本地化工具,使用
ad
和wg
扩展名来定位文件中剩余的字符串。在终端中,将翻译整合到您的字符串文件中。
appleglot -w update
appleglot -w finalize
- 在Finder中,将本地化资源粘贴到Xcode项目文件夹中。
将_NewLoc / [base_language_id] .lproj
文件夹的内容粘贴到Xcode项目文件夹中的[target_language_id] .lproj
文件夹中。 例如,如果目标语言是俄语,请将_NewLoc / en.lproj
文件夹的内容粘贴到ru.lproj
文件夹中。
- 要测试本地化,请使用目标语言启动您的应用程序,如Testing Specific Languages and Regions中所述。
对于Mac应用程序,Xcode模板中的主菜单项会出现翻译,除了应用程序名称的出现。
有关AppleGlot
的更多信息,请阅读位于AppleGlot.dmg
文件中的AppleGlot 4 User’s Guide
。
Updating Storyboard and Xib Strings Files Using ibtool - 使用ibtool更新Storyboard和Xib字符串文件
在.storyboard
或.xib
文件中更改面向用户的文本时,请使用ibtool
命令生成新的字符串文件。使用另一个工具(例如FileMerge)来识别更改并将它们合并到您支持的每种语言的现有字符串文件中。编辑.storyboard或.xib文件时,Xcode不会自动更新相应的字符串文件。
在终端中,切换到Base.lproj
文件夹,然后运行此命令为xib文件生成一个字符串文件:
ibtool [MyNib] .xib --generate-strings-file [MyNib_new.strings]
或者,在将更改与每个lproj
文件夹中的[MyNib] .strings
文件合并之前,将输出文件中的更改本地化。要从Xcode启动FileMerge
,请选择Xcode> Open Developer Tool> FileMerge
。
或者,您可以使用ibtool
命令将翻译合并回nib文件并执行其他增量本地化更新,如ibtool
手册页中所述。或者使用appleglot
命令来管理对字符串文件的更改,如Importing Localizations中所述
Creating a Pseudolocalization - 创建伪定位
如果Testing Your Internationalized App中描述的伪定位选项不足以测试您的应用程序,请创建您自己的伪定位。 将语言添加到您的项目中,如Using Base Internationalization中所述。 通过用伪文本替换占位符文本来编辑语言文件夹中的字符串文件。 如Testing Specific Languages and Regions中所述设置语言启动参数,然后运行您的应用程序。
例如,通过添加世界语言的特征来编辑字符串文件中的占位符文本,但保持原文可读,如
/* distance for a marathon */
"RunningDistance" = "[ŔûüñńîńɠƊïšṱáäńçêè]";
一种技术是为每个字符串添加前缀和后缀。 然后,您可以轻松识别在测试应用程序时这些前缀和后缀不显示的位置。 使用多字节字符作为前缀来验证您的应用是否支持这些字符
后记
本篇主要讲述了自己管理字符串文件,感兴趣的给个赞或者关注~~~~