iOS 本地化应用程序(NSLocalizedString)
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)的更多相关文章
- iOS本地化应用程序
因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的 ...
- iOS本地化
本地化与相机中显示英文 工程PROJECT -> info ->Localizations 添加相应的国际化语言 一.当你发现相机中显示英文,可以通过它设置 添加一项“Localize ...
- iOS单个应用程序的最大可用内存是多少?
iOS单个应用程序的最大可用内存是多少? StackOverflow上有人做了一些简单的测试,有限设备下迄今为止测到的结果: iPad1: 127MB/256MB/49% (大致crash临界值 ...
- iOS 中捕获程序崩溃日志
iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼ iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...
- Windows Phone 8初学者开发—第7部分:本地化应用程序
原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密
原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...
- iOS开发人员程序许可协议
请细致阅读以下的许可协议条款和条件之前下载或使用苹果软件. 这些条款和条件构成你和苹果之间的法律协议. iOS开发人员程序许可协议 目的 你想使用苹果软件(例如以下定义)来开发一个或多个应 ...
- 【iOS系列】-程序开启后台运行
[iOS系列]-程序开启后台运行 iOS程序是伪后台的运行,可是有时候我们需要让其在后台也要进行一些操作,我们可以让其伪装成音乐的APP,这样就可以让程序后台进行相关操作了,具体做法如下: 1:在Ap ...
- XCode iOS之应用程序标题本地化
1.XCode项目中创建一个.strings 扩展名的文件:打开File > New > File,选择Resource中Strings Fils,如图:点击下一步,为文件命名为(强烈建议 ...
随机推荐
- DataTable.AcceptChanges方法有何用处
提交自上次调用 AcceptChanges 以来对该表进行的全部更改. 调用 AcceptChanges 后,再用 DataAdapter.Update() 不会有不论什么新数据被更新到数据库中.那- ...
- vue开发体验
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- DevExpress ASP.NET 使用经验谈(3)-XPO对象的使用(使用指定数据连接)
首先,我们贴出上一节Users类XPO对象的保存代码,直接建立的XPO Session会话,因为没有与我们所期望的数据层建立绑定, 所以程序自动创建了一个Access数据库,作为默认数据库操作对象来使 ...
- 利用jQuery获取数据,JSONP
最近工作用到了跨域请求,所以此文就有了,概念网上都有,就不细说了,直接来了. 看了一篇文章,说的是通过扩展让ASP.NET Web API支持JSONP,jsonp网上有很多的教程,js代码部分基本和 ...
- ThinkPHP - 事务操作
/* * 添加酒店和房型 * */ public function insertAll($arr_hotel=array(),$arr_room=array()){ $model = new Mode ...
- Canvas使用渐变之-线性渐变详解
在canvas里面,除了使用纯色,我们还能把填充和笔触样式设置为渐变色:线性渐变和径向渐变. 线性渐变 createLinearGradient(x0,y0,x1,y1) 返回 CanvasGrad ...
- mfc主窗口添加背景图片后,如何实现在背景图片上输出文字
1.若是文档视图程序的话,在视图类的OnDraw(CDC* pDC)函数中调用pDC->TextOut()函数,就像平常输出文字一样.若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用pDC ...
- 解决虚拟内存不够导致Eclipse is not responding
安装目录下eclipse.ini中: 修改参数至必要大小. e.g. -vmargs-Djava.net.preferIPv4Stack=true-Dosgi.requiredJavaVersion= ...
- Binary Tree Preorder Traversal and Binary Tree Postorder Traversal
Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...
- hdoj 1013
比较坑的一道题...直接做肯定WA http://acm.hdu.edu.cn/showproblem.php?pid=1013 #include<iostream> #include&l ...