ios开发应用内实现多语言自由切换
2024-08-29 08:53:08
需求描述:应用内部有一按钮,点击切换语言(如中英文切换)。
说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下。
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则重新初始化等等
最新文章
- 浅析word-break work-wrap区别
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现(转载)
- linux_c学习笔记之curl的使用一
- ajax发布评论 、显示评论
- If-Modified-Since &; If-None-Match
- wget 无法下载jdk的处理办法
- CodeForces 157C Message
- PHPstorm端口配置问题
- javascipt : filter
- Spring中一个类的注入和引用是不一样的
- [置顶]
 Chat Room:基于JAVA Socket的聊天室设计
- Android手机通过APN设置上网的方法
- 排队时延(Queuing delay)
- Jdbc、Mybatis、Hibernate各自优缺点及区别
- Android应用程序国际化
- sudo: unable to execute ./script.sh: no such file or directory
- [redis] redis
- vue轮播图实现
- python2.x到python3.x函数变化
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 转