ios开发应用内实现多语言自由切换
需求描述:应用内部有一按钮,点击切换语言(如中英文切换)。
说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下。
1.原理。
查看NSLocalizedString(@"abc",nil);的定义。
1
2
|
#define NSLocalizedString(key, comment) \ [[ NSBundle mainBundle] localizedStringForKey:(key) value:@ "" table: nil ] |
然后思考,为什么这个定义会定位到当前系统默认的语言对应的strings文件呢?
如果这点想通了,那问题就迎刃而解了不是?
2.具体解析
重定义NSLocalizedstring。
1
2
3
|
#define AppLanguage @"appLanguage" #define CustomLocalizedString(key, comment) \ [[ NSBundle bundleWithPath:[[ NSBundle mainBundle] pathForResource:[ NSString stringWithFormat:@ "%@" ,[[ NSUserDefaults standardUserDefaults] objectForKey:@ "appLanguage" ]] ofType:@ "lproj" ]] localizedStringForKey:(key) value:@ "" table: nil ] |
不用解释了吧?查找对应的strings文件。
3.用法
1
2
3
4
|
if (![[ NSUserDefaults standardUserDefaults]objectForKey:AppLanguage]) { [[ NSUserDefaults standardUserDefaults] setObject:@ "zh-Hans" forKey:AppLanguage]; } label.text= CustomLocalizedString(@ "sub_menu_download" , nil ); //@"离线下载"; |
4.切换
点击中英文切换按钮时,
1
2
3
4
5
6
7
8
|
NSString *currentLanguage = [[ NSUserDefaults standardUserDefaults]objectForKey:AppLanguage]; if ([currentLanguage isEqualToString: @ "en" ]) { [[ NSUserDefaults standardUserDefaults] setObject:@ "zh-Hans" forKey:AppLanguage]; } else { [[ NSUserDefaults standardUserDefaults] setObject:@ "en" forKey:AppLanguage]; } [[ NSUserDefaults standardUserDefaults] synchronize]; |
程序还要再做进一步的界面相关的处理,如是tabbar则重新初始化等等
ios开发应用内实现多语言自由切换的更多相关文章
- ios 应用多语言自由切换实现
第一次进入应用获取本机语言.1.假设本机语言在软件实现语言列表里.则默认选中本机语言,可是用户还是能够选择其他语言.2.假设本机语言不在软件实现语言列表里,则默认选中英语.用户还是能够选择其他语言. ...
- iOS应用内语言切换功能
当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...
- iOS 多语言的切换
一.添加应用程序需要支持的国际语言 二.新建一个Localizable.strings文件,作为多语言对应的词典,存储多种语言 三.在Localizable.strings的对应文件以键值对的形式配置 ...
- Cocos2d-x使用iOS游戏内付费IAP(C++篇)
本文章转载 http://www.ityran.com/archives/5515.非本人原创! 前期准备 设备与账号 在开始编码之前我们需要准备测试环境. IAP只能真机测试,准备一台iOS设备是必 ...
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇
前几天发布了一篇iOS开发之多表视图滑动切换示例(仿"头条"客户端)的博客,之所以写这篇博客,是因为一位iOS初学者提了一个问题,简单的写了个demo做了个示范,让其在基础上做扩展 ...
- 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】
记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...
- SQL Server 2016将内置R语言?
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语 ...
- iOS应用内付费(IAP)开发步骤列表
iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...
- lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了
lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了 解决:将主上的keepalived重启,故障解除 原因:不可知 lvs常见故障原因: real server上的脚步没 ...
随机推荐
- mysql set names.
SET NAMES utf8 相当于 SET character_set_client = utf8 --用来设置客户端送给MySQL服务器的数据的 字符集 SET character_set_res ...
- Hibernate 一对多双向关联Demo
以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { privat ...
- 简单的js反选,全选,全不选
<html> <head> <base href="<%=basePath%>"> <title>My JSP 'che ...
- PHP表单提交验证各种方式
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- Qt Painter放大时,event处理应该注意的要点
比如当你Qt中用QPainter进行window和viewport,逻辑和物理坐标分离的形式进行绘图放大的时候,你会发现鼠标的移动和放大之后的图像有点不跟手,比如你是用QTransform进行放大变换 ...
- centos 下搭建 php环境(2) mysql 安装
CentOS下的MySQL 5.1安装 01 1.下载源码包 wget http://mysql.llarian.net/Downloads/MySQL-5.1/mysql-5.1.63.tar. ...
- Aptana Studio 快捷键
窗口 Ctrl+ Shift +L 调出快捷键提示 Ctrl+ W 关闭当前标签窗口 Ctrl+ Shift + W 关闭当前标签窗口 Ctrl+ F6 (或者是Aptana的Ctrl+Tab )下一 ...
- UvaLive 6661 Equal Sum Sets (DFS)
Let us consider sets of positive integers less than or equal to n. Note that all elements of a set a ...
- Linux 下安装Python框架django建立与mysql的连接
0.基本环境说明: a. Ubuntu 14.04 64bit b. python 2.7.6 c. django 1.8 d. django-registration e. django-widge ...
- onCreateOptionsMenu与onCreateContextMenu差别
onCreateOptionsMenu只会在启动时调用一次,而onCreateContextMenu则每次都会调用,这是因为onCreateContextMenu需要为所有的View控件的上下文菜单服 ...