iOS实现应用内切换本地化语言的方法实例

前言

当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了。当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局、交互效果的转变,如微信,微博,QQ这类应用都有着切换语言的功能。

最近因为工作的原因,遇到个需要在应用内部设置语言的需求,默认使用系统设置的语言,如果用户在App内设置了别的语言,以后则按照新设置的语言显示界面。

iOS确定应用的语言

1.iOS首先搜索用户的语言偏好设置(设置-通用-语言与地区)

2.检测你的应用是否支持用户的语言,先用偏好设置的第一个语言,检测应用是否包含该语言对应的文件夹(后缀是.lproj,文件名部分,英语为en,中文简体为zh-Hans,日语为ja)如果存在,那就是该语言,否则用偏好设置第二个语言来匹配。重复该过程。

3.一旦系统为应用确定了语言,对应的.lproj文件夹就会用作本地化资源。

于是,写了个新轮子SOLocalization (本地下载),希望大家喜欢,其实代码很简单,有兴趣的可以直接去读源代码,有补充的可以直接向我提交 pull request。下面话不多说了,来一起看看详细的介绍吧。

方法如下:

1.创建本地化文件。

创建本地化字符串文件,文件名可以是默认的 infoPlist.strings,也可以是别的,为这个文件设置好要支持的语言及内容。

2.导入 SOLocalization。

3.配置 SOLocalization。

设置支持的语言及默认语言,当系统设置的语言不属于支持的语言时会使用默认语言。

[SOLocalization configSupportRegions:@[SOLocalizationEnglish, SOLocalizationSimplifiedChinese] fallbackRegion:SOLocalizationEnglish];

4.设置 UIKit 对象。

为 UIKit 对象设置合适的属性,像下面这样简单,而且这样设置后,当语言切换时,这些 UIKit 对象的文本内容会自动变为新设置的语言,不需要任何额外处理。

UIBarButtonItem *change = [[UIBarButtonItem alloc]initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(changeLanguage:)];
// 这里的 @"Setting" 就是 strings 文件中对应的那个 key,下同
change.sol_title = @"Setting";
self.navigationItem.rightBarButtonItem = change;
self.label.sol_text = @"label";
[self.button sol_setTitle:@"button" forState:UIControlStateNormal];
self.textField.sol_placeholder = @"textField placeholder";
self.navigationItem.sol_title = @"title";

对于 SOLocalization 暂不支持切换语言后自动修改文本内容的 UIKit 对象,可以这样获取需要的本地化字符串:

// 其中 “title” 为 strings 文件中对应的 key,“infoPlist”是本地化字符串文件名
NSString *localizedString = SOLocalizedStringFromTable(@"title", @"infoPlist");

5.修改应用内使用的语言

// to use English
[SOLocalization sharedLocalization].region = SOLocalizationEnglish;
// to use 简体中文
[SOLocalization sharedLocalization].region = SOLocalizationSimplifiedChinese;

6.自定义的本地化字符串文件名

SOLocalization 提供的 API 中,默认使用的本地化字符串文件名为 infoPlist.strings 文件,如果使用其他文件名(比如使用这个文件名:local.strings),如下即可:

// 对于支持的 UIKit 对象
label.sol_table = @"local";
// 使用 SOLocalizedStringFromTable 时
NSString *localizedString = SOLocalizedStringFromTable(@"title", @"local");

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

您可能感兴趣的文章:

  • IOS应用程序多语言本地化的两种解决方案
  • ios多种语言的本地化思路
  • iOS多语言本地化流程的优化方案
(0)

相关推荐

  • ios多种语言的本地化思路

    多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 1.本地化应用程序名称 2.本地化字符串 3.本地化图片 4.本地化其他文件 1.本地化应用程序名称 (1)点击"new file"然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到"String File"的图标.创建这个文件,命名

  • IOS应用程序多语言本地化的两种解决方案

    最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 本地化应用程序名称 本地化字符串 本地化图片 本地化其他文件 1.本地化应用程序名称 (1)点击"new file"然后在弹出窗口左侧选择iOS的resource项,在

  • iOS多语言本地化流程的优化方案

    前言 多语言本地化,是我们在做IOS项目的时候经常用的,下面根据自己的经验和使用场景,来全面的说说多语言本地化的解决方案.本文从提升效率和减少错误两方面对传统的多语言本地化方式进行了优化,虽然标题是iOS,但其实macOS也通用.下面话不多说了,来一起看看详细的介绍吧. 传统的方法 在 Localizable.strings 中写入多种语言的版本,然后使用 NSLocalizedString 进行本地化: # en.lproj/Localizable.strings "login" =

  • iOS实现应用内切换本地化语言的方法实例

    前言 当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有着切换语言的功能. 最近因为工作的原因,遇到个需要在应用内部设置语言的需求,默认使用系统设置的语言,如果用户在App内设置了别的语言,以后则按照新设置的语言显示界面. iOS确定应用的语言 1.iOS首先搜索用户的语言偏好设置(设置-通用-语言与地区) 2.检测你的应用是否支持用户的语言,先用

  • iOS实现应用内切换语言及字体大小(模仿微信)

    前言 最近公司需要切换多语言和字体大小功能,上网查看比较少的实用方案.于是我经过几天尝试和思考完成了第一版的应用内多语言版本切换的功能Demo.下面分享给大家,需要的朋友可以参考学习,下面话不多说了,来一起看看详细的介绍吧. 方案思路: 一.如何只在一个配置文件中,实现多语言的配置. 二.每个文本控件如何显示对应语言. 三.如果通过开关来控制界面中的每个文本控件,同时切换对应的语言和字体样式. 首先: 解决第一个配置问题:我是用plist文件(JSON文件也可以).通过一个key 对应一组语言数

  • awk正则表达式和内置函数的使用方法实例详解

    awk正则表达式及内置函数实例详解: 1.模糊匹配: 复制代码 代码如下: awk '{if($3~/97/) print $0}' data.f:如果第三项中含有"97"则打印该行 awk '{if($4!~/ufcx/) print $0}' data.f:如果第三项中不含ufcx有则打印 2.精确匹配: 复制代码 代码如下: awk '{if($5==66) print $0}' data.f:如果第五项是66则打印 awk '{if($5!=66)print $0}' data

  • Python求区间正整数内所有素数之和的方法实例

    前言 Python的学习记录与分享--PTA程序设计类教学平台.如果你也正在学习关于此类的题目可以仔细阅读这篇文章,了解一下循环结构.素数的基本语法知识. 题目: 7-5就区间正整数内所有素数之和 (20分) [描述]求m-n以内所有素数之和并输出.‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬素数指从大于1,且仅能被1和自己整除的整数.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

  • App内切换语言详解

    前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言.啥意思,就是 英.中.法.德.日...语言随意切换. (本案例采用Data-Bingding模式,麻麻再也不用担心我findViewBy不到Id了哈哈,开个玩笑) 先上示例图: 代码实现: 布局文件(Data-Binding模式),很简单就是两行文字 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:a

  • Laravel5.5 动态切换多语言的操作方式

    第一步: 新建所有的语言包文件 resources/lang messages.php 就是返回一个数组 return [] 格式 中文的: return [ "test" => "这里是测试", "test1" => "继续测试", ...... ]; 英文的: return [ "test" => "this is a test...", "test1&q

  • iOS实现图片自动切换效果

    本文实例为大家分享了iOS实现图片自动切换的具体代码,供大家参考,具体内容如下 #import "ViewController.h" #define ImageViewCount 5 @interface ViewController ()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *imageScrollView; @property (weak, nonatomic)

  • iOS实现多控制器切换效果

    本文实例为大家分享了iOS实现多控制器切换效果的具体代码,供大家参考,具体内容如下 主控制器 ,管理控制器 .h文件 //宏 #define kScreenWidth  [UIScreen mainScreen].bounds.size.width #define kScreenHeight  [UIScreen mainScreen].bounds.size.height #import "MYMainViewController.h" #import "MYFirstVi

  • iOS swift 总结NavigationController出现问题及解决方法

    IOS swift 总结NavigationController出现问题及解决方法 最近用Swift语言做了一些iOS项目,颇有些心得,记下一些深刻的问题造福自己,服务大家 1.以NavigationController做为容器后状态栏的字体颜色就会不在受系统的控制,要在NavigationController中的根ViewController中设置方可生效,代码如下: self.navigationController!.navigationBar.barStyle = UIBarStyle.

  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解 IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pr

随机推荐