多语言本地化,是我们在做IOS项目的时候经常用的,下面根据自己的经验和使用场景,来全面的说说多语言本地化的解决方案。
首先我们要明白本地化的原理和过程,才能更好的理解本地化的方案,本地化主要包括下面几个部分:
- 本地化应用程序名称
- 本地化字符串
- 本地化图片
- 本地化其他文件
一、本地化应用程序名称,这个只有一种方案:
- 点击“new file”然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到“String File”的图标。创建这个文件,命名为“InfoPlist”(一定是这个文件名) 就生成一个InfoPlist.strings文件;
- 选中InfoPlist.strings 点击 XCode-> View-> Utilities -> File Inspector,在Localization中点“+”,添加chinese (zh-Hans)类型的为简体中文,english 应该会自动添加上。然后在InfoPlish.strings 左边会多出一个三角形,点击展开后可以看到InfoPlish.strings(english)和InfoPlish.strings(chinese)两个版本的文件;
- 在InfoPlish.strings(english)文件中加入:
- CFBundleDisplayName ="Program"; 其中“Program”为英文应用程序名称,同理在InfoPlish.strings(chinese)文件中加入:
- CFBundleDisplayName ="应用程序"; 其中“应用程序”为中文名称,注意:CFBundleDisplayName加不加双引号都行
- 编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其value设置为YES即可
二、本地化字符串和本地化图片的解决方案有下面两种:
- 程序中提供给用户自己选择的机会,用户可以使用按钮等方式自有切换语言,和当前系统的语言没有关系;
- 根据当前用户当前移动设备的语言自动将我们的app切换对应语言。
第一种做法看似比较简,当时其实想灵活实现也需要费点心思,具体的实现方法如下:
- 创建多个strings文件,名字不能用Localizable.strings。
- 多个strings文件如:English.strings/Chinese.strings/German.strings等等。
- 每个文件中的内容和写法与Localizable.strings类似。
- 使用方式:NSLocalizedStringFromTable(@"start",@"Chinese", nil) 。
- 根据用户的操作,来更新页面的多语言显示。
- 图片的本地化,不同语言获取不同的图片名称即可。
第二种做法,主要分一下几点:
- 类似“本地化应用程序名称”第一步,点击“new file”然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到“String File”的图标。创建这个文件,命名为“Localizable”(一定是这个文件名否则后面调用会有一些区别)就生成一个Localizable.strings文件;
- 类似“本地化应用程序名称”第二第三步,在Localizable.strings(english)文件中加入:
"welcome"="Click on the screen to continue...";同理在Localizable.strings(chinese)文件中加入:
"welcome"="点击屏幕继续...";在代码中使用NSLocalizedString(<#key#>, <#comment#>)来读取本地化字符串。
注:图片的本地化, 这里不同语言的图片的名称要一样,但是要放到不同的语言文件夹中。
三、本地化其他文件
本地化其他文件和本地化图片第二种方法类似,先在Localization中添加语言,然后把对应版本拷贝到en.lproj和zh-Hans.lproj文件夹中,最后引用就行了。