App本地化的需要不用讲大家也都明白,本文将介绍一种简单的方法来实现字符串的本地化。

在不考虑本地化的情况下,我们如果在代码中给一个Button定义title,一般会这样写:

btn.titleLable.text = @"Example Button";

也许我们已经写了很长的代码才考虑到本地化的问题,大可不必头疼,这时候,我们要做的是把代码从头扫一遍,然后把每个会显示给用户看的字符串做如下修改:
(对于内部使用的字符串就用不着本地化了)

btn.titleLable.text = NSLocalizedString(@"btn_title", nil);

NSLocalizedString是一个定义在NSBundle.h中的宏,其用途是寻找当前系统语言对应的Localizable.strings文件中的某个key的值。
第一个参数是key的名字,第二个参数是对这个“键值对”的注释,在用genstrings工具生成Localizable.strings文件时会自动加上去。

到目前为止,我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资源文件。

当我们把所有的.m文件都修发好了,就该genstrings工具出场了。这时需要用到终端,对mac机的终端操作指令不太熟悉,查资料,了解了几个简单的。

切换目录:后面需要建新的文件,新建的文件肯定要在我的项目底下,我们可以用finder找到自己的项目,可不知道路径,finder界面也没有显示,简单,在终端中输入下面指令就可以让finder的正上方显示路径了:

defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES

知道了路径,就可以切换到这个目录了,就是cd指令:

cd /Users/gpm0-mac-mini/Documents/GAIADemo_1/GAIADemo

1. 启动终端,进入工程所在目录。

2. 新建两个目录,推荐放在资源目录下。

 目录名会作用到Localizable.strings文件对应的语言,不能写错了。这里zh-Hans指简体中文,注意不能用zh.lproj表示。zh-Hant表示繁体中文,en表示英语,ja表示日语。zh-CN  zh-TW 都可以用。这个名字千万不能搞错,要不然对应不到。

mkdir zh-Hans.lproj
mkdir en.lproj
mkdir zh-Hant.lproj
mkdir ja.lproj

3. 生成Localizable.strings文件

genstrings -o zh-Hans.lproj *.m
genstrings -o en.lproj *.m
genstrings -o zh-Hant.lproj *.m
genstrings -o ja.lproj *.m

-o <文件夹>,指定生成的Localizable.strings文件放置的目录。
*.m,扫描所有的.m文件。这里支持的文件还包括.h, .java等。

4. 右键点击工程的目录,选择“New Group”,可以新建一个文件夹,这个文件夹名字随便取。
5. 在新建的group中添加刚刚生成的后缀为.lproj文件。
6. 最后在相对应的Localizable.strings文件中,修改每个key所对应的内容,就大功告成了。

iOS 本地化应用程序(NSLocalizedString)的更多相关文章

  1. iOS本地化应用程序

    因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的 ...

  2. iOS本地化

    本地化与相机中显示英文  工程PROJECT -> info ->Localizations 添加相应的国际化语言  一.当你发现相机中显示英文,可以通过它设置 添加一项“Localize ...

  3. iOS单个应用程序的最大可用内存是多少?

    iOS单个应用程序的最大可用内存是多少?   StackOverflow上有人做了一些简单的测试,有限设备下迄今为止测到的结果: iPad1: 127MB/256MB/49% (大致crash临界值 ...

  4. iOS 中捕获程序崩溃日志

    iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼     iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...

  5. Windows Phone 8初学者开发—第7部分:本地化应用程序

    原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...

  6. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...

  7. iOS开发人员程序许可协议

    请细致阅读以下的许可协议条款和条件之前下载或使用苹果软件.   这些条款和条件构成你和苹果之间的法律协议.   iOS开发人员程序许可协议   目的 你想使用苹果软件(例如以下定义)来开发一个或多个应 ...

  8. 【iOS系列】-程序开启后台运行

    [iOS系列]-程序开启后台运行 iOS程序是伪后台的运行,可是有时候我们需要让其在后台也要进行一些操作,我们可以让其伪装成音乐的APP,这样就可以让程序后台进行相关操作了,具体做法如下: 1:在Ap ...

  9. XCode iOS之应用程序标题本地化

    1.XCode项目中创建一个.strings 扩展名的文件:打开File > New > File,选择Resource中Strings Fils,如图:点击下一步,为文件命名为(强烈建议 ...

随机推荐

  1. FIB数列

    斐波那契级数除以N会出现循环,此周期称为皮萨诺周期. 下面给出证明 必然会出现循环 这是基于下面事实: 1. R(n+2)=F(n+2) mod P=(F(n+1)+F(n)) mod P=(F(n+ ...

  2. phantompy — phantompy 0.10 documentation

    phantompy - phantompy 0.10 documentation     phantompy¶     Release v0.10.     phantompy is a BSD Li ...

  3. 《Java虚拟机原理图解》 1.2.2、Class文件里的常量池具体解释(上)

    [last updated:2014/11/27] NO1.常量池在class文件的什么位置? 我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了clas ...

  4. Sql语句之select 5种查询

    select 5种子句:注意顺序where / group by /having / order by / limit / 清空表中的数据:truncate 表名: 导入表结构(不含数据): crea ...

  5. 关于js的一些总结

    1.js中如果判断变量是否为空,要注意两种情况: 一种是变量为空:另一种是变量为0: 2.js如果要进行算术运算或者比较,最好把它强制类型为整型或者浮点型.防止字符串比较,如果本来是数字的字符串,如果 ...

  6. JDBC:Java连接数据库的桥梁

    JDBC(Java DataBase Connection),java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...

  7. SAE部署Java应用

    链接地址:http://blog.csdn.net/shuixin536/article/details/9031335 SAE为开发者提供了非常宽松的开发环境,你甚至不用做任何特别定制就能将各种Ja ...

  8. 解决gnuplot中'Terminal type set to 'unknown'不能显示绘图的问题

    安装gnuplot: sudo apt-get install gnuplot 安装成功后,在终端输入gnuplot,进入gnuplot. 直接进行一个小测试: plot sin(x) 发现不能显示绘 ...

  9. 【原创】MapGIS K9 三维二次开发入门

    开发语言:C# 平台版本:MapGIS K9 SP3 MapGIS K9三维平台也提供了接口和组件以实现二次开发.用户可以根据提供的接口和组件进行二次开发,也可以借助MapGISK9数据中心框架,可以 ...

  10. 使用 Async 和 Await 的异步编程 #Reprinted#

    异步方法容易编写 string urlContents = await client.GetStringAsync(); 以下特征总结了使上面一个异步方法. 方法签名包含一个 Async 或async ...