App国际化

2017-01-05  本文已影响0人  CoderZxq

App国际化

跟着我,一起创建一个国际化的App

过程

  1. 创建工程:ZXQBKAppLocalizationTest

  2. 在ViewController.m写几行需要国际的Macro(NSLocalizedString等)

NSString *name = NSLocalizedString(@"name", @"名字");
NSString *country = NSLocalizedString(@"country", @"国家");
  1. 修改ZXQBKAppLocalizationTest的development language,
  1. 在工程目录下genstrings导出development language的strings file。
find . -name \*.m | xargs genstrings -o .

ls 多了一个文件Localizable.strings,文件内容:
comment
key = value的形式。
这里会发现我们的main.storybord和launchScreen.storybord多出一个.strings文件。

  1. 将4步中的Localizable.strings导入工程。


    5-15-1

    你会发现value就是key,原因:development language默认会把key作为user-face text。可我们希望value是中文。

  2. 我们需要将strings文件导出为zh-Hans.xliff,如果我们用editor -> export Localizations会发现export的.xliff的target为空,那么这个.xliff就无法import到工程里。解决的方法是:用命令行。

xcodebuild -exportLocalizations -localizationPath <dirpath> -project <projectname> [[-exportLanguage <targetlanguage>]]

例如:xcodebuild -exportLocalizations -localizationPath ~/desktop -project ZXQBKAppLocalizationTest.xcodeproj -exportLanguage zh-Hans
我们会发现./desktop里多了一个zh-Hans.xliff文件。(我用的支持xliff格式的第三方免费工具:XLIFFTool,appstore有)

6-16-1
我们可以看到source=zh-Hans,target=zh-Hans,倘若你的target=?,那么.xliff是无法import工程里的。
  1. 我们需要把Localizable.strings的target用中文替换。

  2. import zh-Hans.xliff到工程里
    我们会发现strings文件已经改变了

    8-18-1
    我的运行结果
    8-28-2
  3. 添加另一种语言:英语

    图9-3图9-3
    Resource选择zh-Hans:
    9-19-1
    工程文件:
    9-29-2
    查看:Localzable.strings(English)
    9-49-4
    发现:文件里面的内容和zh-Hans一模一样。
    思考:因为我们Resource选择的是zh-Hans,所以这个文件和zh-Hans一样。不妨我们修改Localzable.strings(English)的内容,再导入一个日文,以en为Resource。
    修改en的value为英文
    9-69-6
    Resource选为en
    9-59-5
    Localzable.strings(japanese)的value为英文。果然添加一个新语言时,value由Resource决定。
    9-79-7
  4. 使用 editor export en.xliff

    10-210-2
    打开文件:
    10-310-3
    发现:Source为中文,而不是key。
    思考:我们思维定式会认为key,value,comment这样,但是这里发现是这个source感觉是zh-Hans的value。那么到底是不是呢,不妨修改Localzable.strings(chinese(simplified))的国家->国家哈哈。
    10-410-4

export en.xliff看看

10-510-5
发现:source变成“国家哈哈”了。
思考:如果这个source就是我们zh-Hans的value的话,那么我们就好理解了。项目组的translator不应该是根据key(程序员定的),而是应该根据value(user-text的实际内容)来翻译的。
  1. 测试一下我们的英文。
    12-112-1
    12-212-2

结束语:第一次写博客,慢慢积累经验。加油。

上一篇 下一篇

猜你喜欢

热点阅读