第一次进入应用获取本机语言.1.假设本机语言在软件实现语言列表里.则默认选中本机语言,可是用户还是能够选择其他语言.2.假设本机语言不在软件实现语言列表里,则默认选中英语.用户还是能够选择其他语言.

全部要更换语言的controller里注冊通知.当用户选择了一个语言后发送语言改动的通知.控制器收到语言改动通知后,对须要改动语言的控制进行又一次设置.

/** 初始化语言 */

- (void)initLanguage{

//1.
获取系统支持的语言

_languages = [NSMutableArrayarrayWithCapacity:5];

NSURL *url = [[NSBundlemainBundle]URLForResource:kLanguagePlistwithExtension:kTypePlist];

NSDictionary *dic = [NSDictionarydictionaryWithContentsOfURL:url];

//2
生成语言对象

[dicenumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL
*stop) {

DYCXLanguage *language = [DYCXLanguagelanguageWithKey:keyAndValue:obj];

[_languagesaddObject:language];

}];

//3.
获取用户保存的语言[0] = 中文简体, [1] = zh-Hans;

NSString *userLanguageValue = [selfgetUserLanguage];

if (!userLanguageValue) {

userLanguageValue =kDefaultUserLanguage;

//3.1
获取系统语言

NSString * localLanguage = [selfgetLocalLanguageValue];

//3.2.
确定默认语言

for (DYCXLanguage *languagein_languages)
{

//3.3.假设软件语言包涵系统语言默觉得系统语言,假设不包涵默认设置为英语

if ([localLanguageisEqualToString:language.languageValue]) {

userLanguageValue = localLanguage;

}

}

}

//4.
设置当前语言

for (DYCXLanguage *languagein_languages)
{

if ([userLanguageValueisEqualToString:language.languageValue]) {

language.used =YES;

_userLanguage = language;

break;

}

}

}

- (NSString *)getLocalLanguageValue{

NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];

NSArray *languages = [defaultsobjectForKey:@"AppleLanguages"];

return [languagesobjectAtIndex:0];

}

#pragma mark - 语言更改,又一次载入

- (void)reloadStringWithLanguage{

[_confirmsetTitle:[NSStringlocalizedWithString:@"dialog_positive_key"]forState:UIControlStateNormal];

_selectLanguage.text = [NSStringlocalizedWithString:@"select_language_key"];

if ([self.delegaterespondsToSelector:@selector(onLanguageChange)])
{

[self.delegateonLanguageChange];

}

}

#pragma mark -NSString 的分类,载入相应文件夹里的string

+ (NSString *)localizedWithString:(NSString *)key{

NSString *area = [DYCXConfigsharedDYCXConfig].userLanguage.languageValue;

if (!area) {

area = kDefaultUserLanguage;

}

NSString *table = [NSStringstringWithFormat:@"%@.lproj/Localizable",
area];

NSString *localizedString = [[NSBundlemainBundle]
localizedStringForKey:(key)value:nil
table:(table)];

NSAssert(localizedString,@"localized error, table = %@, key = %@", table, key);

return localizedString;

}

以本地化方式获取国际化信息的显示名称

NSLocale *curLocal = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-Hans"] ;

NSLog(@"%@",[curLocal displayNameForKey:NSLocaleIdentifier value:@"fr_FR"] );// 法文(法国)

curLocal = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-Hant"] ;

NSLog(@"%@",[curLocal displayNameForKey:NSLocaleIdentifier value:@"fr_FR"] );//法文(法國)

ios 应用多语言自由切换实现的更多相关文章

  1. ios开发应用内实现多语言自由切换

    需求描述:应用内部有一按钮,点击切换语言(如中英文切换).说起来这个是好久以前做的一个功能点了,刚开始也是没有头绪,后来解决了发现很简单,把方法分享一下.1.原理.查看NSLocalizedStrin ...

  2. iOS 多语言的切换

    一.添加应用程序需要支持的国际语言 二.新建一个Localizable.strings文件,作为多语言对应的词典,存储多种语言 三.在Localizable.strings的对应文件以键值对的形式配置 ...

  3. iOS应用内语言切换功能

    当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...

  4. 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】

    记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...

  5. IOS关于UIViewController之间的切换

    IOS关于UIViewController之间的切换 1.NavigationController切换UIViewController的两种方式 方法一右侧进入 1 SecondViewControl ...

  6. lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了

    lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了 解决:将主上的keepalived重启,故障解除 原因:不可知 lvs常见故障原因: real server上的脚步没 ...

  7. iOS 国际化多语言设置 xcode7

    iOS 国际化多语言设置 方式一: 1. 在storyboard中创建好UI,然后在 project 里面  Localizables 栏目里面,添加你需要的语言:默认是Englist; 比如这里我添 ...

  8. 李洪强漫谈iOS开发[C语言-043]-判断较早日期

    李洪强漫谈iOS开发[C语言-043]-判断较早日期

  9. 李洪强漫谈iOS开发[C语言-043]-练习

    李洪强漫谈iOS开发[C语言-043]-行李重量计算价格

随机推荐

  1. HTML-DEV-ToolLink(常用的在线字符串编解码、代码压缩、美化、JSON格式化、正则表达式、时间转换工具、二维码生成与解码等工具,支持在线搜索和Chrome插件。)

    HTML-DEV-ToolLink:https://github.com/easonjim/HTML-DEV-ToolLink 常用的在线字符串编解码.代码压缩.美化.JSON格式化.正则表达式.时间 ...

  2. SQLSERVER WINDBG调试:mssqlwiki.com

    https://mssqlwiki.com/2012/10/16/sql-server-exception_access_violation-and-sql-server-assertion/ SQL ...

  3. 使用强大的可视化工具redislive来监控我们的redis

    原文:http://www.cnblogs.com/huangxincheng/archive/2016/06/08/5571185.html 作为玩windows的码农,在centos上面装点东西, ...

  4. 关于spring-data-jpa的排序问题

    本测试基于springBoot框架实现. pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  5. 'dict_values' object does not support indexing, Python字典dict中由value查key

    Python字典dict中由value查key 众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂.但是dict需要占用较大的内存空间,换句 ...

  6. 函数指针&指针函数

    https://blog.csdn.net/luoyayun361/article/details/80428882

  7. [Functional Programming] Combine Multiple State ADT Instances with the Same Input (converge(liftA2(constant)))

    When combining multiple State ADT instances that depend on the same input, using chain can become qu ...

  8. js获取url參数值的两种方式具体解释

    有个url例如以下: http://passport.csdn.net/account/login? from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit ...

  9. 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)

    弹出的形式对于用户来说,总是不太友好的 可能会出现层级问题(只需要设置一下提示的层级即可) WxValidate内置规则 以下代码拷贝即可使用~ wxml <form bindsubmit='s ...

  10. js map、filter、forEach

    1.map方法 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="U ...