姜晓冲,大千游戏,桂林新闻网
localizations
中,点击加号按钮,添加支持的语言storyboard
,例如默认的main.storyboard,
在localization
栏中勾选支持的语言。系统就会生成对应的文件。strings
资源文件。在该文件的file inspecter
的localizatio
n栏中勾选支持的语言。localizable.strings(english)
中,"消息" = "messages"; "搜索" = " search";
#define chinese_simple @"zh-hans" #define chinese_traditional @"zh-hant" #define english_us @"en" #define korean @"ko"
定义偏好设置的文件名称
#define language_key @"eagle_languagekey"
/// 设置多语言 /// @param language 语言 - (void)setnewlanguage:(nsstring *)language { nsstring * setlanguage = [[nsuserdefaults standarduserdefaults] objectforkey:language_key]; if ([language isequaltostring:setlanguage]) { return; } // 简体中文 else if ([language isequaltostring:chinese_simple]) { [[nsuserdefaults standarduserdefaults] setobject:chinese_simple forkey:language_key]; [[nsuserdefaults standarduserdefaults] synchronize]; } // 繁体中文 else if ([language isequaltostring:chinese_traditional]) { [[nsuserdefaults standarduserdefaults] setobject:chinese_traditional forkey:language_key]; [[nsuserdefaults standarduserdefaults] synchronize]; } // 英文 else if ([language isequaltostring:english_us]) { [[nsuserdefaults standarduserdefaults] setobject:english_us forkey:language_key]; [[nsuserdefaults standarduserdefaults] synchronize]; } // 韩语 else if ([language isequaltostring:korean]) { [[nsuserdefaults standarduserdefaults] setobject:korean forkey:language_key]; [[nsuserdefaults standarduserdefaults] synchronize]; } }
#define languagestringwithkey(key) [[languagetools sharedinstance] getstringforkey:key] nsstring *title = languagestringwithkey(@"确定");
具体实现如下,先偏好设置存储的当前语言获取对应bundle,然后拿到这个bundle之后,根据key找到对应的值。
// 根据语言名获取bundle - (nsbundle *)bundle { nsstring * setlanguage = [[nsuserdefaults standarduserdefaults] objectforkey:language_key]; //默认是简体中文 if (setlanguage == nil || [setlanguage isequaltostring:@"zh-hans-cn"]) { setlanguage = chinese_simple; } nsstring * bundlepath = [[nsbundle mainbundle] pathforresource:setlanguage oftype:@"lproj"]; return [nsbundle bundlewithpath:bundlepath]; } // 根据key获取value - (nsstring *)getstringforkey:(nsstring *)key { nsbundle * bundle = [[languagetools sharedinstance] bundle]; if (bundle) { nsstring * valuestring = nslocalizedstringfromtableinbundle(key, @"localizable", bundle, @"helloword"); if (!kcnsstring_isempty(valuestring)) { return valuestring; } ddloginfo(@"\n********** have not add key **********\n \"%@\" = \"%@\" \n****************************",key,key); return nslocalizedstring(key, @"helloword"); } return nslocalizedstring(key, @"helloword"); }
nslocalizedstring
nslocalizedstring
是一个定义在nsbundle.h
中的宏,用途是寻找当前系统语言对应的localizable.strings
文件中的某个key
的值。
第一个参数是key
的名字,第二个参数是对这个“键值对”的注释,在用genstrings
工具生成loclizable.strings
文件时会自动加上去。例如上面代码中的helloword
就是注释。
nslocalizedstring
系列的四个宏,其实最终都是调用了[bundle localizedstringforkey:(key) value:(val) table:(tbl)]
。根据我们的自定义程度不同可以选择不同的宏。
#define nslocalizedstring(key, comment) \ [nsbundle.mainbundle localizedstringforkey:(key) value:@"" table:nil] #define nslocalizedstringfromtable(key, tbl, comment) \ [nsbundle.mainbundle localizedstringforkey:(key) value:@"" table:(tbl)] #define nslocalizedstringfromtableinbundle(key, tbl, bundle, comment) \ [bundle localizedstringforkey:(key) value:@"" table:(tbl)] #define nslocalizedstringwithdefaultvalue(key, tbl, bundle, val, comment) \ [bundle localizedstringforkey:(key) value:(val) table:(tbl)]
上面基本就是实现一个可控的多语言版本的实现过程。
推荐
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!!
点击进行留言回复
您可能感兴趣的文章:
网友评论