扫码关注官方订阅号
如题,app支持中文,英文,日文三种语言。希望在其他语言的情况下都使用英文。如何实现啊,网上看到的自己实现Localized,有没有苹果原生的方法来指定啊
走同样的路,发现不同的人生
将项目plist中的开发地区改为en即可
en
<key>CFBundleDevelopmentRegion</key> <string>en</string>
苹果的多语言原理 名词介绍Localizable.strings 多语言文件,用于本地化App内的字符串InfoPlist.strings 多语言文件,用于本地化App名称Base 多语言默认文件,被其它多语言 (Chinese, English, ...) 继承和覆盖,不会被iOS直接使用,只有当对应的多语言文件中没有找到相应条目时才会到Base中查找,作用跟函数参数的默认值差不多。 查找原理App启动时,iOS会遍历用户设定的语言优先级去和App的多语言文件匹配如果匹配,会使用对应的语言如果不匹配,会使用plist中开发地区所对应的语言 简体中文 zh-Hans日语 ja英语 en 更多介绍
苹果的多语言原理
名词介绍Localizable.strings 多语言文件,用于本地化App内的字符串InfoPlist.strings 多语言文件,用于本地化App名称Base 多语言默认文件,被其它多语言 (Chinese, English, ...) 继承和覆盖,不会被iOS直接使用,只有当对应的多语言文件中没有找到相应条目时才会到Base中查找,作用跟函数参数的默认值差不多。
Localizable.strings
InfoPlist.strings
Base
查找原理App启动时,iOS会遍历用户设定的语言优先级去和App的多语言文件匹配如果匹配,会使用对应的语言如果不匹配,会使用plist中开发地区所对应的语言
简体中文 zh-Hans日语 ja英语 en
zh-Hans
ja
更多介绍
你好,用我提供的 DPLocalizedString 方法代替系统的 NSLocalizedString 即可。
DPLocalizedString
NSLocalizedString
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0]) + (NSString *)DPLocalizedString:(NSString *)translation_key { NSString * LocalizableStr = NSLocalizedString(translation_key, nil); if (!([CURR_LANG rangeOfString:@"ja"].length >0) && !([CURR_LANG rangeOfString:@"zh-Hant"].length >0) && !([CURR_LANG rangeOfString:@"zh-Hans"].length >0)) { NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; NSBundle * languageBundle = [NSBundle bundleWithPath:path]; LocalizableStr = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; } return LocalizableStr; }
题主 你好,我为你提供一个想法,具体的实现 可能需要你自己根据需求来做。
获取机器默认语言
NSArray *languages = [NSLocale preferredLanguages]; //获得首选语言版本 NSString *language = [languages objectAtIndex:0];
2.判断该语言
if ([language hasPrefix:@"zh-Hans"]) { //简体中文 //do... } else if ([language hasPrefix:@"zh-TW"] || [language hasPrefix:@"zh-HK"] || [language hasPrefix:@"zh-Hant"]) {//繁体中文 由于繁体又有台湾繁体和香港繁体之分 进行判断然后为繁体 } else if ([language hasPrefix:@"en"]) {//英文 }else if ([language hasPrefix:@"ja"]){//日文 }else{ //设置语言为英文... }
iOS的国际化来说一直都感觉处理起来非常麻烦,也一直想找找到一个比较完美的解决方案来解决国际化问题。之前分享过一篇过于国际化的文章,现再深入分析一下。因为文章之前写的。原文章已经被更新啦。会在最后更新出来。一.存在问题1.官方没有给出一套关于国际化的完美的处理方式。2.没有适配这种语言的时候不能指定显示其他语言。它会默认选择上一次的语言。3.大版本更新后,数据更新不兼容之前的版本。4.添加特定的语言资源文件和代码返回的语言没有对应起来。
二.国际化框架思想
针对上面的这些问题,我是启用了一个plist来处理国际化问题。plist里的key和value做一个对应,如果获取当前的语言和plist对应起来就显示当前的语言,不然就显示指定的语言。
三.实现方式在特定的语言基础上添加对应的语言包。用NSLocalizedString来获取对应的语言。获取当前语言
NSArray * allLanguages = [defaults objectForKey:@"AppleLanguages"]; NSString * CURR_LANG = [allLanguages objectAtIndex:0];
判断当前语言是否是要适配的语言
if (![CURR_LANG hasPrefix:@"en"] && ![CURR_LANG hasPrefix:@"zh"]) { NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; NSBundle * languageBundle = [NSBundle bundleWithPath:path]; s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; }
s就是当前非中文或者英文下的语言,当前可以把英文去掉,因为判断不判断英文都是要处理成英文的。显示如下
if (![CURR_LANG hasPrefix:@"zh"]) { NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; NSBundle * languageBundle = [NSBundle bundleWithPath:path]; s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; }
我的笔记里有些关于总结国际化内容。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
将项目plist中的开发地区改为
en
即可你好,用我提供的
DPLocalizedString
方法代替系统的NSLocalizedString
即可。题主 你好,我为你提供一个想法,具体的实现 可能需要你自己根据需求来做。
获取机器默认语言
2.判断该语言
iOS的国际化来说一直都感觉处理起来非常麻烦,也一直想找找到一个比较完美的解决方案来解决国际化问题。之前分享过一篇过于国际化的文章,现再深入分析一下。
因为文章之前写的。原文章已经被更新啦。会在最后更新出来。
一.存在问题
1.官方没有给出一套关于国际化的完美的处理方式。
2.没有适配这种语言的时候不能指定显示其他语言。它会默认选择上一次的语言。
3.大版本更新后,数据更新不兼容之前的版本。
4.添加特定的语言资源文件和代码返回的语言没有对应起来。
二.国际化框架思想
针对上面的这些问题,我是启用了一个plist来处理国际化问题。
plist里的key和value做一个对应,如果获取当前的语言和plist对应起来就显示当前的语言,不然就显示指定的语言。
三.实现方式
在特定的语言基础上添加对应的语言包。用NSLocalizedString来获取对应的语言。
获取当前语言
判断当前语言是否是要适配的语言
s就是当前非中文或者英文下的语言,当前可以把英文去掉,因为判断不判断英文都是要处理成英文的。显示如下
文章链接
我的笔记里有些关于总结国际化内容。