iOS国际化(应用内切换语言)

作者: kunkunm | 来源:发表于2018-03-02 17:27 被阅读101次

首先问一个弱弱的问题,在项目开发过程中,哪些内容需要国际化?App中出现的所有文本内容本文吗?非也非也。

本文将以适配中文和英文为例,分为四个部分来介绍国际化的实现。

1.哪些内容需要国际化?

首先来说开头提到的看似弱弱的问题。乍一看,你一定会觉得不就是所有的文本内容吗?非也。举个栗子:比如你要发一条微博,文本内容包括:用户名,XX分钟前,来自XX设备,正文内容。仅这四个对象,你觉得哪几个需要适应用户的语言呢?用户名,显然不需要翻译,我给自己起名叫二狗子,你给我翻译成 The second son of dog,你觉得合适么?XX分钟前,"分钟前"就是一个需要翻译的内容。同样,来自XX设备的“来自”也需要翻译,而XX设备则是获取的动态数据,不需要翻译,当然也不是所有的动态数据都不需要翻译,这个就要根据各自项目视不同情况而定了。正文内容,与用户名同理,比如我是个泰国人,我发个“萨瓦迪卡”,你给我翻译成“你好”,我反而看不懂了。这一段话写的稍显啰嗦,总结起来就一句话:固定文本内容一般需要翻译,动态数据要视情况而定,另外,项目名称依据实际需求而定。

2.需要哪些类,文件,配置作为支持?

  • 类:皮肤管理者类,继承自NSObject
  • 文件:Strings File如图 lan00.png

3.各个文件,类之间如何配合?

  • 皮肤管理者类会包含三个方法供外部调用。
    一、生成单利+ (instancetype)sharedInstance;
    二、获取文本内容+ (NSString *)localizedStringWithKey:(NSString *)key;
    三、切换语言+ (void)changeLanguage;注意,正式项目中该方法会根据实际需求有所变化,在该例中仅做简单的中英文互相切换。
    下面来具体说说,单利方法自不必多说。主要讲最核心的方法+localizedStringWithKey:它的内部是这样的 lan01.png
    方法一共有四行代码
    第一行[self currentLanguage] 会获取本地偏好中保存的当前语言,比如英文返回en,中文返回zh-Hans。获取这个值的目的是选择下图中红色标注的路径: lan02.png
    en.lproj中会保存 英文环境需要的strings文件。zh-Hans.lproj中则保存中文环境需要的stings文件。strings文件内部是这样的: lan03.png
    lan05.png

这个文件中每一行可以写一对 键值对, = 前面的是键(切换语言),= 后面的是要显示在界面上的值(language)。
第二行就是获取到当前语言环境的路径了。
第三行[[NSBundle bundleWithPath:lPath] localizedStringForKey:key value:nil table:@"Localizable"]则是根据第二行获取到的路径再根据 刚才我们提到的=前面的键 比如“切换语言”,以及文件名字"Localizable" 获取到我们最终要在界面上显示的内容,就是前面说到的 =后面的值。

所以,外部的实例通过调用语言管理者的localizedStringWithKey:方法,传入key(比如:传入切换语言),就能得到英文环境下要显示的内容:language,中文环境下则是:切换语言。

lan04.png 动图效果如下: lan06.gif

4.总结

通过上面的描述可以看到,国际化的核心在于
[[NSBundle bundleWithPath:lPath] localizedStringForKey:key value:nil table:@"Localizable"] 这个方法以及Localizable.strings文件。我们在切换语言时,仅仅是在本地偏好中保存了一个字符串,en或者zh-Hans,而最终显示的内容要依赖于我们在Localizable.strings文件中写的内容,以及NSBundle加载哪个路径的strings文件。

如果有不妥之处,欢迎指正补充。谢谢。

相关文章

  • iOS APP 内切换国际化

    iOS国际化(应用内切换语言) 2018-05-08 17:20 编辑: yyuuzhu 分类:iOS开发 来源:...

  • iOS国际化(应用内切换语言)

    首先问一个弱弱的问题,在项目开发过程中,哪些内容需要国际化?App中出现的所有文本内容本文吗?非也非也。 本文将以...

  • 本地化

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

  • ios 应用内切换语言

    1.首先添加需要支持的语言,默认支持英文,再添加中文即可 2.创建文件 创建完成后,再勾选另外的语言,base暂时...

  • iOS应用内切换语言

    关键代码 最后效果

  • iOS应用内语言切换

    最近项目需要在应用内做到语言切换比较简单的方式是

  • iOS 应用内切换语言

    随着移动App时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言...

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

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

  • Android应用实现语言切换

    语言切换需求 应用内切换语言,支持阿拉伯语(从右到左书写,即RTL语言支持) 语言切换是切换系统语言,不只本应用 ...

  • iOS应用内语言切换功能

    当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了。当面向国外用户时就需要进行国际化了,不仅仅是语...

网友评论

本文标题:iOS国际化(应用内切换语言)

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