什么是本地化处理?

本地化处理就是我们的应用程序有可能发布到世界的很多国家去,因为每个国家应用的语言是不一样的,所以我们要把我们的应用程序的语言要进行本地化处理一下。

本地化处理需要处理那些文件?

(1):本地化应用程序名称(我的的项目名称)

(2):本地化字符串处理(项目中所涉及的字符串)

(3):本地化图片

(4):XIB文件本地化处理

(5):其他文件

下面进行本地化处理:

1 . 设置我们的工程支持多语言

为什么:因为只有设置成支持多语言了,我们才能在展示项目名称和项目中的字符串等将语言进行切换

(1): 首先创建一个项目,以“苹果”为项目名做测试

(2):为工程添加可支持的语言,只有项目具有我们想要用的语言,我们才能讲项目切换成这种语言

如图所示:

 

2:设置项目名称本地化处理

(1):InfoPlist.strings文件是对我们应用程序的名字进行管理的

(2):设置InfoPlist.strings其实很简单,就是借助我们上一步设置的语言环境,将我们想要支持的语言添加到InfoPlist.strings文件之下就可以了

(3):如图所示添加过程:

 

 

(4)接下来我们只需要将CFBundleDisplayName属性和它所对应的值分别写在我们在InfoPlist下创建的文件中

例如:

在InfoPlist.strings(English)中我们写入:CFBundleDisplayName = "apple";

在InfoPlist.strings(Chinese(Simplified))中我们写入:CFBundleDisplayName = "苹果";

在InfoPlist.strings(English)中我们写入:CFBundleDisplayName = "リンゴ";

注意:后面的“”前面不加@

(5):在Info.Plist文件中添加一个属性Application has localized display name然后设置成Boolean类型的Yes就可以了

 

(6):在模拟器中更改模拟器的语言就会看到以下三种效果:

 

 

 

3:本地化字符串处理(项目中所涉及的字符串)

提示:本地化字符串处理和2中讲的项目名本地化处理基本上是一样的,只不过我们需要在创建一个像Info.Plist文件一样的文件来管理我们的本地化字符串

就是创建一个Localizable.strings文件,然后同样是在这个文件夹下创建多种支持语言

在Xcode项目中,在你想要的位置新建文件

然后选中当前文件,属性中 点击 "Localiztion"->"Localize..." ->勾选语言

(1):创建Localizable.strings文件的方式和上面创建Info.Plist的方式是一样的,只是文件名不一样

(2):在Localizable.strings文件下添加支持的语言

如图所示:

 

(3):然后我们在Localizable.strings下得各个文件添加类似于如下的内容:

例如:

Localizable.strings(English)中       “Login”=“Login”;

Localizable.strings(Chinese(Simplified)) 中   “Login” = “登陆”;

Localizable.strings(Japanese) 中  “Login” = “登録”;

然后有人可能问了我们每个等号前的"Login"是怎么确定的? :往下看

然后我们怎么用呢?

就是每次我们在用到我们设定的字符串的时候不用NSString了,我们需要用到一个函数代替它:NSLocalizedString(key, comment)

例如我们要再一个Button上设定主题:button.title = NSLocalizedString(@“Login”, nil);

这个里面的@“Login”就会自动检索于设备相同语言的Localizable.strings下得文件夹,然后在里面找到与@“Login”相同的Key值,然后就输出出来

其实我们在Localizable.strings下得文件夹中设置的内容就像一个字典一样,前面是Key值后面是对应的值,然后就是通过NSLocalizedString(@“Login”, nil);函数进行检索,将key对应的值返回过来。

有人会文NSLocalizedString(key, comment)中的comment是什么,很明显根据字义判断是注释的意思

如图所示:

 

总结:

其实很简单,就是我们把Localizable.strings下面设置好我们所需要的语言,然后我们在将我们在项目中用到的字符串都用"Three"="3";的形式整理到各个对应的文件里面,然后我们要是用到我们需要的字符串的时候我们就通过NSLocalizedString(key, comment)函数以key值的形式找里面的值,然后将我们自己设置的语言对应的值展现出来,这就是本地化处理

文/深山老林飞(简书作者)
原文链接:http://www.jianshu.com/p/b053bbd8c339

【自己的补充】

  

如果是自己的应用本地需要做语言切换的话,实现逻辑如下

1.配置的语言

#define lang_en @"en"
#define lang_zh_hans @"zh-Hans"
#define lang_zh_hant @"zh-Hant"

  下面的方法中languageCode: 就是这几个值, 其他语言的不做阐述

2.通过当前选择的语言调用相应语言字符串

/**
* 获取国际化字符串值
*
* @param key <#key description#>
*/
- (NSString*)localeStringWithKey:(NSString*)key{
// Get the language code.
NSString *languageCode = self.language; // Get the relevant language bundle.
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:languageCode ofType:@"lproj"];
NSBundle *languageBundle = [NSBundle bundleWithPath:bundlePath]; // Get the translated string using the language bundle.
NSString *translatedString = [languageBundle localizedStringForKey:key value:@"" table:nil]; if (translatedString.length < 1) { // There is no localizable strings file for the selected language.
translatedString = NSLocalizedStringWithDefaultValue(key, nil, [NSBundle mainBundle], key, key);
} return translatedString;
}

  

Swift:

//获取国际化
enum AppLanguage:String{
case en = "en"
case zh_Hans = "zh-Hans"
case zh_Hant = "zh-Hant"
}
func localString(key:String) -> String{
// Get the language code.
let languageCode = XPApplication.shareInstance.language // Get the relevant language bundle.
let bundlePath = NSBundle.mainBundle().pathForResource(languageCode, ofType: "lproj")
let languageBundle = NSBundle.init(path: bundlePath!) // Get the translated string using the language bundle.
var translatedString = languageBundle?.localizedStringForKey(key, value: "", table: nil) if translatedString?.length < 1 { // There is no localizable strings file for the selected language.
translatedString = NSLocalizedString(key, tableName: nil, bundle: NSBundle.mainBundle(), value: key, comment: key)
} return translatedString!;
}

  

iOS 语言切换、本地化,国际化的更多相关文章

  1. WPF语言切换,国际化

    winform语言切换在每个窗口下面有一个.resx结尾的资源文件,在上面添加新字符串就好了: WPF语言切换跟winform不一样的地方在于需要自己添加资源文件,并且这个资源文件可以写一个,也可以写 ...

  2. iOS开发——iOS国际化 APP内语言切换

    最近一个一直在迭代的老项目收到一份新的开发需求,项目需要做国际化适配,简体中文+英文.由于项目中采用了storyboard和纯代码两种布局方式,所以国际化也要同时实现.上网查了些资料,实现了更改系统语 ...

  3. iOS - 实现语言本地化/国际化

      实现iOS语言本地化/国际化(图文详解) 前言 语言本地化,又叫做语言国际化.是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言.往往一些应用程序需要提供给多个 ...

  4. 【转】iOS多语言本地化(国际化)设置

    原文网址:http://www.jianshu.com/p/2b7743ae9c90 讨论的iOS应用中的多语言设置,Ok 一般是两种情况: 1.根据当前设备语言自动切换显示 2.在应用中可进行语言设 ...

  5. iOS - 国际化语言切换

    iOS国际化:如何切换语言   1.国际化就是将标签.提示信息等信息放到资源文件中,随着程序需要的语言提供对应的资源文件.以key/value对存储,每个资源的key值不变,value随着需求改变. ...

  6. 3分钟实现iOS语言本地化/国际化(图文详解)

    前言 语言本地化,又叫做语言国际化. 是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言. 往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这 ...

  7. [置顶] iOS 应用程序内部国际化,不跟随系统语言

    前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...

  8. iOS 应用程序内部国际化,不跟随系统语言

    前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...

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

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

随机推荐

  1. LINQ to SQL大全

    LINQ to SQL语句 (1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的 ...

  2. 时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell

    时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell opensuse 一些常用命令:    service xxx start/s ...

  3. 【译】UNIVERSAL IMAGE LOADER.PART 2---ImageLoaderConfiguration详解

    ImageLoader类中包含了所有操作.他是一个单例,为了获取它的一个单一实例,你需要调用getInstance()方法.在使用ImageLoader来显示图片之前,你需要初始化它的配置-Image ...

  4. [51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

    哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过 ...

  5. Jenkins pipeline 入门到精通系列文章

    Jenkins2 入门到精通系列文章. Jenkins2 下载与启动jenkins2 插件安装jenkins2 hellopipelinejenkins2 pipeline介绍jenkins2 jav ...

  6. SignalR初体验

    简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...

  7. Tomcat日志输出在linux和windows差异

    tomca日志保存在${catalina}/logs目录下: 主要包括五类文件,开发测试常使用的日志主要保存在catalina.localhost日志中,且每天生成独立日志文件,结尾以日期命名,方便查 ...

  8. nodejs gearman redis

    export NODE_PATH=/root/gearman-1.1.2/node_modulesnpm install gearmanodenpm install redis w.js var re ...

  9. 转:ffdshow 源代码分析

    ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...

  10. go语言实现一个简单的登录注册web小程序

    最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...