iOS语言本地化

作者: 木木烈少 | 来源:发表于2015-09-13 22:13 被阅读1050次

Brief###

iOS实现语言的本地化很简单,这里只是为了简单的记录一下过程。

一、本地化storyboard上的字符串###

1.创建应用(如项目名为:LocalizationDemo)
2.添加本地化文件

添加本地化文件步骤添加本地化文件步骤
选择要引用的文件选择要引用的文件
3.往Main.storyboard上添加一个label并设置内容为Setting
这时,我们查看Main.strings(Chinese(Simplified))文件,里面是空。
4.为了让文件自动填充内容,有个小技巧:选择Main.storyboard,然后在右边的 Utilities 中选择 Show the file inspector ,然后在Localization项将Localizable Strings切换到 Interface Builder Storyboard,之后再重新切换回去。
切换文件类型切换文件类型
重新切换文件类型重新切换文件类型
再次查看文件,这时已经有如下内容了
/* Class = "UILabel"; text = "Setting"; ObjectID = "cWa-zv-jKP"; */
"cWa-zv-jKP.text" = "Setting";

5.将Setting修改为设置

/* Class = "UILabel"; text = "Setting"; ObjectID = "cWa-zv-jKP"; */
"cWa-zv-jKP.text" = "设置";

6.完成了,运行程序将默认语言改为中文即可看到设置字样

二、本地化代码中的字符串###

  1. 熟悉 NSLocalizedString的用法:参数一为key,参数二为注释;

  2. 在代码中,任何需要本地化的字符串都用NSLocalizedString包裹起来,如输出Test字符串:NSLog(NSLocalizedString("Test", "输出Test字符串"));

  3. 导出需要本地化的字符串,有两种方法:
    a. 通过 genstrings 命令来生成文件:打开终端;用 cd 命令进入到项目目录中;执行 genstrings 命令 genstrings *.swift (如果使用的语言是Objective-C,则将 .swift 改为 .m 即可)。需要注意的是genstrings命令不会遍历子文件夹,换句话说,如果swift文件放在多重文件夹当中,那这些文件将不会被访问到,所以最好的方法是使用find命令先将需要的文件找到,然后再使用genstrings命令来生成文件。如:
    find ./ -name '*.swift' -print0 | xargs -0 genstrings -o ./zh-Hans.lproj/
    说明:-print0xargs的作用可以参考find命令的说明, -o 后面参数指定目标路径

    b. 选择Xcode上左边的Navigator选择项目,然后在菜单栏上选择 Editor -> Export For Localization...,然后指定文件目录(暂时指定到桌面吧)。

    导出本地化文件导出本地化文件
    从桌面路径可以看到生成的文件夹,打开文件夹,里面有个后缀名为xliff的文件,该文件使用的是 xml 格式。打开文件,我们可以看到所有需要本地化的字符串:
...
<body>
      <trans-unit id="cWa-zv-jKP.text">
        <source>Setting</source>
        <target>Setting</target>
        <note>Class = "UILabel"; text = "Setting"; ObjectID = "cWa-zv-jKP";</note>
      </trans-unit>
    </body>
...
<body>
      <trans-unit id="CFBundleName">
        <source>$(PRODUCT_NAME)</source>
      </trans-unit>
      <trans-unit id="CFBundleShortVersionString">
        <source>1.0</source>
      </trans-unit>
    </body>
...
<body>
      <trans-unit id="GOOD">
        <source>GOOD</source>
        <note>输出GOOD字符串</note>
      </trans-unit>
      <trans-unit id="Setting">
        <source>Setting</source>
        <note>No comment provided by engineer.</note>
      </trans-unit>
      <trans-unit id="Test">
        <source>Test</source>
        <note>测试</note>
      </trans-unit>
    </body>

source标签下的内容就是要本地化的字符串,taget标签就是本地化后的字符串,note标签即是注释。我们发现有些source下没有taget标签,我们可以自己加上去,并写上本地化后的字符串,其他taget标签的内容也修改成我们需要的字符串。
修改后进行保存。然后跟上面同样的步骤,我们选择import Localization...导入文件。

导入文件导入文件
然后会看到刚才修改的内容和之前文件内容的对比,点击import即可。
确认导入确认导入
导入成功后,即可看到我们本地化的文件,运行程序,一切顺利:
控制台输出内容控制台输出内容
模拟器上模拟器上
这就完成了本地化了。

参考文章:
[http://blog.chinaunix.net/uid-20082146-id-83489.html]

相关文章

  • iOS 多国语言本地化与App内语言切换(Swift)

    iOS 多国语言本地化与App内语言切换(Swift) iOS 多国语言本地化与App内语言切换(Swift)

  • iOS语言本地化/国际化(图文详解)

    3分钟实现iOS语言本地化/国际化(图文详解)前言语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自...

  • iOS 本地化入门教程

    iOS 本地化入门教程 iOS应用的本地化原理非常简单,是通过strings类型的文件,为同一种语言的不同翻译设置...

  • iOS工程的本地化-Swift

    应用如果需要根据设备语言显示不同的语言,就需要进行本地化的工作。就iOS工程而言,需要本地化的内容主要有:文字、图...

  • ♦️ iOS 名称及内容本地化

    好坑呀找了许久的名称本地化真难找,这里就介绍下应用名称和内容本地化 一.iOS名称本地化(根据系统语言修改App的...

  • iOS语言本地化

    Brief### iOS实现语言的本地化很简单,这里只是为了简单的记录一下过程。 一、本地化storyboard上...

  • 本地化

    今天做不如修仙的本地化,看到这篇文章很详细3分钟实现iOS语言本地化/国际化,评论区还有应用内切换语言的方法,修改...

  • 【技术文章收集】收集

    3分钟实现iOS语言本地化/国际化(图文详解) Apple Watch App开发基础 crash iOS Cra...

  • IOS 多语言本地化 完美解决方案【自动+手动】

    多语言本地化,是我们在做IOS项目的时候经常用的,下面根据自己的经验和使用场景,来全面的说说多语言本地化的解决方案...

  • IOS 多语言本地化 完美解决方案【自动+手动】

    多语言本地化,是我们在做IOS项目的时候经常用的,下面根据自己的经验和使用场景,来全面的说说多语言本地化的解决方案...

网友评论

  • 荷兰豆子Sweetkoto:请问如何设置不同语言的字体和大小呢?
  • FengxinLi:请问一下楼主 xib 或者storyboard里面的会自适应 多语言? 比如xib 里面有个UILabel里面是中文字符串。然后我选择了中文 英文,会自动生成不对应的语言不?
    FengxinLi:@林少烈 好的 谢谢
    木木烈少:@Fengxinliju 没有那么智能,真这样那翻译的人怎么活哈。需要自己写好翻译的,系统只负责语言的映射
  • 痕迹Dev:纠正一下,这个不叫做本地化(L10n)而是叫做国际化(i18n),具体解释可以去看下维基百科。本地化和国际化有区别的。
    木木烈少:@痕迹BLANK 谢谢纠正

本文标题:iOS语言本地化

本文链接:https://www.haomeiwen.com/subject/epzpcttx.html