本文转载至  http://www.cnblogs.com/wuyijibei/archive/2013/08/01/3230468.html

1: 首先, 所有的语言资源还是需要和现在的i18n方法一样,写在文件中,如下"textA = textA", "textB = textB" , 这个是英文的; 中文的就是"textA = A文字", "textB = B文字"。

2: 定义一个语言类(LVC),单列,并在初始化的时候把资源文件load到LVC一个字典中,并且这个LVC得提供一个方法,返回在不同语言环境下的key对应的string 。再 定义一个Delegate,加入一个方法,refresh()。

3 : 所有VC都实现语言类的Delegate,并设置 LVC.delegate = self;  在继承的refresh方法中重置界面上的的文字 , (文字是通过类似 LVC.getInstance().getStringByKey:"textName" 的方法来获取的)

4 用户点击语言切换时,首先替换LVC中的语言标签,再调用delegate.refresh() ,  所有VC都会重新刷新控件上的字体,这个时候取出来的,就是当前语言的string了。

首先需要想办法如何取到本地化数据

NSString*loc =@"zh-Hans";if(![self isChinese]){
loc =@"en";} NSString*path =[[NSBundle mainBundle] pathForResource:_file
ofType:@"strings"
inDirectory:nil
forLocalization:loc]; // compiled .strings file becomes a "binary property list" NSDictionary*dict =[NSDictionary dictionaryWithContentsOfFile:path]; NSString*str =[dict objectForKey:_key];if(str)
{ return str; }
return _key; 剩下的就是如何各种通过 NSLocalizedString载入了。

IOS 程序内部切换语言 的一种方法的更多相关文章

  1. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...

  2. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  3. iOS开发之动画编程的几种方法

    iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...

  4. jquery mobile切换页面的几种方法

    jquery mobile切换页面的几种方法 - 不厚道青蛙之焦油潭 - 博客频道 - CSDN.NET jquery mobile切换页面的几种方法 分类: phonegap html5 2012- ...

  5. VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...

  6. iOS键盘中英文切换键盘高度获取通知方法

    iOS键盘中英文切换键盘高度获取通知方法, 有需要的朋友可以参考下. 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppea ...

  7. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

  8. iOS开发进阶-实现多线程的3种方法

    相关文章链接: 1.多线程简介 2.实现多线程的3种方法 ......待续 前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验.我们务必要把耗时的操作放到别的线程中去执行,千万不要 ...

  9. C# Windows程序窗口置前台的几种方法

    这个是从别的地方看来的,放我这里 第一种:SetForegroundWindow,这个方法时灵时不灵.有人说,在自己的程序里把自己的窗口之前一般就不灵,而置前其它程序的窗口就灵.我觉得这是有原因的:当 ...

随机推荐

  1. 迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员

    一.迭代器 迭代器是泛型指针 普通指针可以指向内存中的一个地址 迭代器可以指向容器中的一个位置 STL的每一个容器类模版中,都定义了一组对应的迭代器类.使用迭代器,算法函数可以访问容器中指定位置的元素 ...

  2. [C/C++11语法]_[0基础]_[lamba 表达式介绍]

    场景 lambda 表达式在非常多语言里都有一席之地,由于它的原因,能够在函数里高速定义一个便携的函数,或者在函数參数里直接高速构造和传递. 它能够说是匿名函数对象,一般仅仅适用于某个函数内,仅仅做暂 ...

  3. MYSQL服务器复制配置

    首先声明:此文是在失去U盘极度郁闷的时候写的,有些零散,估计也有错误.欢迎大家指出   MYSQL服务器复制配置   这是根据我之前看的MYSQL复制的文档然后自己亲自实验的过程.配置的功能比较简单. ...

  4. delphi无边框可拖动窗体

    unit UFrmModless; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...

  5. 479. Second Max of Array【easy】

    Find the second max number in a given array. Notice You can assume the array contains at least two n ...

  6. JAVA判断字符串相等

    java中判断字符串是否相等有两种方法:1.用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc&qu ...

  7. [misc]如何在嵌入式平台使用printf功能

    转自:http://www.cnblogs.com/liu_xf/archive/2011/04/14/2015726.html 摘要: 当我们在调试代码时,通常需要将程序中的某个变量打印至PC机上, ...

  8. wait和waitpid

    当有多个子进程的SIGCHLD信号到达父进程的时候,如果父进程用wait等待,那么父进程在处理第一个达到的SIGCHLD信号的时候,其他的SIGCHLD信号被堵塞,而且信号不被缓存,这样就会导致信号丢 ...

  9. ReentrantReadWriteLock读写锁的使用<转>

    Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...

  10. 网络相关命令-netstat

    网络相关命令 netstat显示网络状态 usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} ne ...