博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios开发应用内实现多语言自由切换 (转)
阅读量:5054 次
发布时间:2019-06-12

本文共 1409 字,大约阅读时间需要 4 分钟。

参考:http://blog.csdn.net/yang8456211/article/details/12031667

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则重新初始化等等

转载于:https://www.cnblogs.com/li-baibo/p/3456016.html

你可能感兴趣的文章
print_r 打印对象
查看>>
zTree——学习记录之一
查看>>
C++的IO操作
查看>>
v-cloakd的应用场景和使用方法
查看>>
BZOJ.3998.[TJOI2015]弦论(后缀自动机)
查看>>
localStorage登录页记住密码(艺博会)
查看>>
JSON.parse()与JSON.stringify()的区别
查看>>
json对象的获取
查看>>
php读取文件内容的三种方式(转)
查看>>
hadoop数据备份
查看>>
二分图匹配 学习笔记
查看>>
poj 2154:Color【polya计数,Euler函数】
查看>>
正则表达式
查看>>
SpringMVC框架学习笔记(2)——使用注解开发SpringMVC
查看>>
深入理解递归函数的调用过程
查看>>
《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题...
查看>>
PDF格式的“在线阅读”和“下载”
查看>>
无耻之徒(美版)第七季/全集Shameless US迅雷下载
查看>>
svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
查看>>
Webpack4 学习笔记四 暴露全局变量、externals
查看>>