美文网首页小问题
iOS APP 内切换国际化

iOS APP 内切换国际化

作者: 叩首问路梦码为生 | 来源:发表于2018-12-05 19:42 被阅读25次

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

2018-05-08 17:20 编辑: yyuuzhu 分类:iOS开发 来源:anonymousCat

2 2412

iOS

招聘信息:

[](javascript:void(0))[](javascript:void(0))

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

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

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

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

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

  • 类:皮肤管理者类,继承自NSObject

  • 文件:Strings File如图

1.png

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

  • 皮肤管理者类会包含三个方法供外部调用。

一、生成单利+ (instancetype)sharedInstance;

二、获取文本内容+ (NSString *)localizedStringWithKey:(NSString *)key;

三、切换语言+ (void)changeLanguage;注意,正式项目中该方法会根据实际需求有所变化,在该例中仅做简单的中英文互相切换。

下面来具体说说,单利方法自不必多说。主要讲最核心的方法+localizedStringWithKey:它的内部是这样的

1.png

方法一共有四行代码

第一行[self currentLanguage] 会获取本地偏好中保存的当前语言,比如英文返回en,中文返回zh-Hans。获取这个值的目的是选择下图中红色标注的路径:

1.png

en.lproj中会保存 英文环境需要的strings文件。zh-Hans.lproj中则保存中文环境需要的stings文件。strings文件内部是这样的:

1.png 1.png

这个文件中每一行可以写一对 键值对, = 前面的是键(切换语言),= 后面的是要显示在界面上的值(language)。

第二行就是获取到当前语言环境的路径了。

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

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

1.png

动图效果如下:

123.gif

4.总结

通过上面的描述可以看到,国际化的核心在于

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

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

作者:anonymousCat

链接:https://www.jianshu.com/p/c70e0b168799

相关文章

  • iOS APP 内切换国际化

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

  • iOS开发之APP内部切换语言

    前言 iOS开发中,随着APP越来越完善,很多APP都做了国际化,也实现了APP内部切换语言。 原理 国际化都会走...

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

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

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

    想要实现App内的语言切换功能,那么首先要创建国际化语言文件,用于存储对应语言显示的文本。1、创建国际化语言文件c...

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

    精准与否,就是屠宰和手术的区别。 —— 卡蜜尔 前言 App国际化老生常谈,App内语言切换这个相关文章已经很多,...

  • iOS程序内部切换语言

    iOS系统的国际化需要在设置中进行切换,切换完成后会杀死APP,给用户体验不是很好,好在系统给了我们自己建国际化文...

  • iOS开发——iOS国际化 APP内语言切换

    最近一个一直在迭代的老项目收到一份新的开发需求,项目需要做国际化适配,简体中文+英文。由于项目中采用了storyb...

  • iOS 国际化(App内语言切换)[转]

    原文链接:https://www.jianshu.com/p/66618c845107 想要实现App内的语言切换...

  • iOS国际化详解

    iOS的国际化功能可以使APP很方便的在不同国家的不同语言之间进行切换,大大的方便了APP走向国际。国际化的时候主...

  • iOS国际化简单操作

    iOS国际化简单操作 国际化后的App可以根据手机当前系统语言来切换不同的语言来适应不同的语言使用人群, 所以iO...

网友评论

    本文标题:iOS APP 内切换国际化

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