开发者的灵魂

iOS - 国际化

2018-10-23  本文已影响0人  素还真人

手机程序的发展,是Mac、windows电脑程序的一个重复。

如何实现iOS国际化,并可作为插件使用?

原理:

文件 - xxxx.strings

页面中需要支持多语言的文案,单独提取到xxxx.strings文件中

NSLocalizedStringFromTableInBundle

iOS中使用系统提供的方法NSLocalizedStringFromTableInBundle,从特定语言的文件夹中,找到xxxx.strings文件并读取对应文案

对podspec文件做配置

iOS组件使用CocoaPods打包时,对podspec文件做配置,将xxxx.strings打进组件包中

iOS系统对其他格式的文件(plist、json)的支持

iOS系统对info.plist、magic_config.json等,已经支持国际化配置功能

语言管理工具

依赖我们自己开发的工具SDK:TeString

App内重置语言

App内更换语言后,需要重新设置window的rootViewController

实施步骤:

xxxx.strings

xcode中,cmd+n,创建一个File,选择Strings File:

完成xxxx.strings创建后,打开xxxx.strings的多语言支持:

在Pods.xcodeproj工程中,添加对其他语言的支持:

注意:不使用base;pod install后,若此配置失效,需要重新执行这一步。

添加xxxx.strings的支持的语言:

添加其他格式的文件(plist、json、nib、txt、png)的多语言

在我们的组件中,以magic_config.json文件的形式,提供了可配置能力。

要求:magic_config.json中的可配置文字,需要提取出来,更新到xxx.strings文件中。

  如果magic_config.json文件中有其他功能配置,也需要支持多语言的部分,可对该文件添加多语言支持,如下图:

  还需要在finder中,将该文件删除,在en.lproj和zh-Hans.lproj中已经有一份:

info.plist的国际化支持

需要添加相同名字的strings文件,如infoPlist.strings,然后找到info中想要修改的key,添加不同语言的value。

例:

在InfoPlist.strings(Chinese(Simplified))添加

/*权限声明*/

NSCameraUsageDescription = "用于打开相机";

NSContactsUsageDescription = "用于打开联系人";

NSLocationWhenInUseUsageDescription = "用于打开定位";

NSMicrophoneUsageDescription = "用于打开耳机";

NSPhotoLibraryUsageDescription = "用于打开相册";

在InfoPlist.strings(English)添加:

/*权限声明*/

NSCameraUsageDescription = "Used to open camera";

NSContactsUsageDescription = "Used to open contacts";

NSLocationWhenInUseUsageDescription = "Used to open location";

NSMicrophoneUsageDescription = "Used to open microphone";

NSPhotoLibraryUsageDescription = "Used to open photos";

对podspec文件做配置,将多语言文件打进包内:

注意:对原来的resources,添加'CWKit/**/*.lproj',不可是'CWKit/**/*.lproj/*.strings',会因为文件重名,进行覆盖,导致只有一份xxx.strings文件。

组件打包后,会看到xxx.Framework包文件中:

app运行时,可以看到mainbundle中已经有了组件的多语言文件,并统一合并到en.lproj和zh-Hans.lproj文件夹中:

使用TeString,在代码获取多语言文案

使用方法如下:

1、在podfile中添加对TeString的依赖:pod 'TeString'

2、头文件引用:#import <TeString/TeIntenational.h>

3、方法调用:TStringWithKeyFromTable(@"keyName",@"tableName");

参考文:https://www.jianshu.com/p/627da5a9992chttps://www.jianshu.com/p/f8edd7b7a217

 

上一篇下一篇

猜你喜欢

热点阅读