App国际化

App国际化

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

过程

  1. 创建工程:ZXQBKAppLocalizationTest

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

NSString *name = NSLocalizedString(@"name", @"名字");
NSString *country = NSLocalizedString(@"country", @"国家");
  1. 修改ZXQBKAppLocalizationTest的development language,
  • info.plist -> Localization native development region : zh-Hans;
  • open ZXQBKAppLocalizationTest.xcodeproj,修改developmentRegion = zh-Hans;
  • 重新启动xcode会发现zh-Hans成为了development language


    App国际化_第1张图片
    图片4-1
  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导入工程。


    App国际化_第2张图片
    5-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  -project  [[-exportLanguage ]]

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

App国际化_第3张图片
6-1

我们可以看到source=zh-Hans,target=zh-Hans,倘若你的target=?,那么.xliff是无法import工程里的。

  1. 我们需要把Localizable.strings的target用中文替换。

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

    App国际化_第4张图片
    8-1

    我的运行结果
    App国际化_第5张图片
    8-2

  3. 添加另一种语言:英语

    App国际化_第6张图片
    图9-3

    Resource选择zh-Hans:
    App国际化_第7张图片
    9-1

    工程文件:
    App国际化_第8张图片
    9-2

    查看:Localzable.strings(English)
    9-4
    9-4

    发现:文件里面的内容和zh-Hans一模一样。
    思考:因为我们Resource选择的是zh-Hans,所以这个文件和zh-Hans一样。不妨我们修改Localzable.strings(English)的内容,再导入一个日文,以en为Resource。
    修改en的value为英文
    App国际化_第9张图片
    9-6

    Resource选为en
    App国际化_第10张图片
    9-5

    Localzable.strings(japanese)的value为英文。果然添加一个新语言时,value由Resource决定。
    App国际化_第11张图片
    9-7

  4. 使用 editor export en.xliff

    App国际化_第12张图片
    10-2

    打开文件:
    App国际化_第13张图片
    10-3

    发现:Source为中文,而不是key。
    思考:我们思维定式会认为key,value,comment这样,但是这里发现是这个source感觉是zh-Hans的value。那么到底是不是呢,不妨修改Localzable.strings(chinese(simplified))的国家->国家哈哈。
    App国际化_第14张图片
    10-4

export en.xliff看看

App国际化_第15张图片
10-5

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

  1. 测试一下我们的英文。
    App国际化_第16张图片
    12-1

    App国际化_第17张图片
    12-2

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

你可能感兴趣的:(App国际化)