原文: http://www.cocoachina.com/index.php/archives/cocoachina_161.html
我们知道,Cocoa程序是完全支持多语言的,包括iPhone中的程序。这里简单介绍一下制作多语言iPhone程序的方法,同时也是iPhone中显示中文的最好办法。这种方法在Toolchain和官方SDK都适用。
一、XCode中支持多语言
如果你使用XCode,那么方法非常简单:
在项目中点右键,选择Add->New File
在列表中选择Strings File
可以叫做Localizable.strings,也可以取别的名字,比如MyApp.strings
选中MyApp.string,按command+i,点击左下方的Make File Localizable,你会看到General中的Localizations里面已经有了English。
点击下面的Add Localization,添加一个zh_CN(简体中文)和一个zh_TW 或者 zh_HK(繁体中文)。注意zh_Hans(简体中文)和zh_Hant(繁体中文)在Mac中可以正确识别,但是在iPhone中不能正确识别。
如果你想支持别的语言,可以添加:
日语:Japanese
德语:German
西班牙语:Spanish
法语:French
.strings文件的内容可以是标准的plist格式,也可以是旧的列表格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>mykey</key>
<string>myvalue</string>
….
</dict>
</plist>
字符串如果要换行的话,直接按回车换行,不要写成\n这种形式。
或者直接使用旧式的列表格式:
"mykey" = "myvalue";
…
注意每行后面加分号。
如果你使用的是Localizable.strings,那么你在程序中可以这样获取字符串:
NSLocalizedString(@"mykey", nil)
如果你使用的是自定义名字的.strings,比如MyApp.strings,那么你在程序中可以这样获取字符串:
NSLocalizedStringFromTable (@"mykey",@"MyApp", nil)
这样即可获取到"myvalue"这个字符串,可以是任何语言。
如果你使用的是官方的iPhone SDK,那么项目中包含这个.strings就可以直接使用了,如果你使用的是toolchain,那么需要修改一下Makefile:
增加
LANG_FILES=$(wildcard *.lproj)
LANG_FILES_ABS=$(addprefix $(SRCROOT)/,$(LANG_FILES))
RESOURCES=Resources
找到
$(APP_ABS): $(INFOPLIST_ABS)
在最后一行增加:
cp -R $(LANG_FILES_ABS) $(APP_ABS)/$(RESOURCES)
这样即可让你的iPhone程序支持多语言环境了。 当然如果你不怕麻烦,也可以每次都手工把这些.lproj目录复制到编译好的Bundle里,也是一样的。
二、在其他开发环境支持iPhone多语言环境
如果你使用Windows或者Linux编译iPhone toolchain,那么你需要这样做:
在编译好的iPhone程序的Bundle(比如MyApp.app这个目录)里建一个Resources目录,然后分别建立:
English.lproj/
zh_CN.lproj/
zh_TW.lproj/
….
每个语言的目录放一个.strings文件。比如MyApp.strings 保存成UTF-8编码(文件名在不同语言的目录中要一致)
字符串的获取方法和上文相同,你也可以通过修改Makefile在编译的时候自动将.strings资源文件的各个目录复制到程序的Bundle里。
另外,在iPhone程序中,语言资源目录既可以放在Resources目录里,也可以直接放在Bundle里。
这种方法的好处很明显:因为iPhone OS中已经内建了多语言的支持,为什么不把你的程序也做成更多人可以使用的呢?另外,这样做还可以避免使用传统的@"中文"显示为乱码的问题(因为NSString字符串的这种创建方法只支持7Bit ASCII码)。
分享到:
相关推荐
基于位置的服务使用GPS或手机发射塔三角测量法,让你可根据所处位置来定制用户体验。凭借功能全面的SQL数据库,利用强大的本地存储,可以完成偶尔连接的计算和同步操作。浏览器和地图视图可以直接嵌入在应用程序中。...
2多种服务器环境支持,多模板支持,多语言支持等 3搜索引擎友好生成HTML,URL重写,自定义URL地址,自定义Meta信息 4可扩展的ThinkTemplate模板引擎,可自定义标签库和强大的定制功能 安装方法: 1 直接通过...
adb 实用程序支持一些可选命令行参数,以提供强大的特性,例如复制文件到设备或从设备复制文件。可以使用 shell 命令行参数连接到手机本身,并发送基本的 shell 命令。图 4 显示在通过 USB 线连接到 Windows 笔记本...
3.23 Android多语系支持 3.24 判断手机操作系统版本是否允许运行程序 3.25 两个不同的程序彼此调用 3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 ...
3.23 Android多语系支持 3.24 判断手机操作系统版本是否允许运行程序 3.25 两个不同的程序彼此调用 3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 ...
《google android sdk开发范例大全(第3版)》内容由android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合android的初学者和android的进阶程序开发者阅读参考。 目录 《google android sdk开发范例...
3.23 Android多语系支持 3.24 判断手机操作系统版本是否允许运行程序 3.25 两个不同的程序彼此调用 3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 ...
3.23 Android多语系支持 3.24 判断手机操作系统版本是否允许运行程序 3.25 两个不同的程序彼此调用 3.26 指定安装应用程序迁移至SD卡 3.27 手机动态Layout主题随手势物换迁移 第4章 史上超豪华的手机控件 4.1 ...
《Google Android SDK开发范例大全(第3版)》内容由Android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合Android的初学者和Android的进阶程序开发者阅读参考。 目录 第1章 了解、深入、动手做 1.1...
Unity 作为一种开发环境,可让你脱离传统的游戏开发方式,以一种更简单的方式专注 于你的游戏开发。开发网络游戏、移动游戏、单机游戏, Unity 都能完全胜任。 ==================================================...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。...
Box2d同时也提供了各种语言环境的实现,由于Ophone平台使用java作为变成语言,所以我们将选择使用Box2d的java版JBox2d,这也将产生一个问题,JBox2D是用processing库来处理图像显示,所以Ophone平台上则不适用,在...
先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的屏幕上能用来显示网页的一块区域,即浏览器上用来显示网页的那部分区域。...
一个简单而强大的个人笔记环境。 借助As Note,您可以使用智能手机或平板电脑,或在桌面上使用Chrome的As Noted扩展程序来编辑和管理您的笔记。将您的注释与Dropbox链接后,您的注释将在...支持语言:Deutsch,English