第一次进入应用获取本机语言.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. iOS 取消警告

    第一步找到要取消的警告类型 在相应的警告上右击->Reveal in Log 被选中的-Wdeprecated-declarations就是我们所要的警告类型了. -W是前缀,这个前缀表示的是 ...

  2. Java压缩字符串的方法收集

    说明: 1.一般来说要实现压缩,那么返回方式一般是用byte[]数组. 2.研究发现byte[]数组在转成可读的String时,大小会还原回原来的. 3.如果采用压缩之后不可读的String时,互相转 ...

  3. Shell中 调用/引用/包含 另外的脚本文件的两种方法

    脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...

  4. access 数据更新语句

    UPDATE YS_POINT AS a, YS_LINE AS b SET a.管线高程 = b.SELEV1WHERE (((a.物探点号)=[b].[起点号]));

  5. SpringBoot项目设置热部署

    记录一个SpringBoot 设置热部署(修改项目之后,项目自动重启)实例 POM.XML 文件 <!-- 配置springBoot项目的热部署启动 --> <dependency& ...

  6. Listener监听器之HttpSessionListener

    编写一个OnlineUserListener. package anni; import java.util.List; import javax.servlet.ServletContext; im ...

  7. java中List和Array相互转换

    List to Array List 提供了toArray的接口,所以可以直接调用转为object型数组 List<String> list = new ArrayList<Stri ...

  8. g++ 链接静态库命令应该放在最后

    昨天编译去年写的FloorServer,居然一堆错误: chu@chu-laptop:/media/E/work/github/FloorServer/FloorServer$ makeg++ -g ...

  9. mysql增量备份(1/2)

    转自:http://www.centos.bz/2012/11/mysql-incremental-backup/ 小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们 ...

  10. HDU 2191悼念512汶川大地震遇难同胞——珍惜如今,感恩生活(多重背包)

    HDU 2191悼念512汶川大地震遇难同胞--珍惜如今.感恩生活(多重背包) http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意: 如果你有资金n元, ...