ios实现国际化
2012-06-26 10:48 java环境变量 阅读(366) 评论(0) 编辑 收藏 举报其实大可不必。我们可以使用iPhone的多语言支持来实现项目的本地(国际)化。
1、新建Windows-base Application。打开main.m文件,在main函数中增加代码如下:
// 取得用户默认信息
NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ];
// 取得 iPhone 支持的所有语言设置
NSArray *languages = [defaults objectForKey : @"AppleLanguages" ];
NSLog ( @"%@" , languages);
运行程序,从 console 中输出如下内容:
"zh-Hans",
en,
fr,
de,
"zh-Hant",
……
可以看到, iPhone 设备上支持的所有语言,有英、法、德,还有两个 ”zh” 开头的语言(简体/繁体)。我们知道,以 ”zh” 开头的就是中文。
2 、在 Resources 上右键, Add à New File ,文件类型选择 Resource->Strings File,文件名为 Localizable.strings 。在该文件上使用 getInfo 命令,在如下界面中点击Make File Localizable 按钮:
然后 , 你去 Finder 中查看工程目录,会发现多了一个 English.lproj 的目录,其下有一个 Localizable.strings 文件(不过其中的内容是空的)。
再次打开 getInfo 窗口,显示如下界面:
可以看见 Localizations 列表中只有一个语言 English ,我们需要点击 Add Localization按钮,增加中文 zh_CN :
这时,你再去 Finder 中查看工程目录,发现又多了一个 zh_CN.lproj 的目录,其下也有一个 Localizable.strings 文件(内容也是空的)。
同时,在 Target 下的 Copy Bundle Resources 目录下多出两个不同语言版本的Localizabel.strings 文件(一个 English ,一个 zh_CN ):
3 、打开 MainWindow.xib ,拖一个 UILable 到 window 中。
4 、打开 AppDelegate.h 文件,在其中申明 UILable 变量并增加一个 IBOutlet :
UILabel * label ;
……
@property ( nonatomic , retain ) IBOutlet UILabel* label;
5 、打开 AppDelegate.m 文件,
@synthesize window,label;
在 ( BOOL )applicationv:application didFinishLaunchingWithOptionsv: 方法中增加代码:
// 使用NSLocalizedString函数根据iPhone的多语言设置获取国际化的字符串
label . text = NSLocalizedString ( @"Localizable Test" , @"" );
6 、回到 IB ,将 UILable 控件和 IBOutlet 变量 label 进行连接:
7 、打开终端程序,进入工程目录,运行命令:
genstrings -o English.lproj ./classes/*.m
你会发现 English.lproj 目录下的那个 Localizable.strings 文件中增加了一行代码:
"Localizable Test" = "Localizable Test" ;
再运行命令:
genstrings -o zh_CN.lproj ./classes/*.m
同样 , 在 zh_CN.lproj 目录下的那个 Localizable.strings 文件中也会增加一行代码:
"Localizable Test" = "Localizable Test" ;
打开 zh_CN.lproj 目录下的 Localizable.strings (双击),修改为
"Localizable Test" = " 本地化测试 " ;
这样,每当源代码有改变后,我们都需要用 genstrings 命令重新生成Localizable.strings 文件。但是,每次重新生成后,原来的编辑(翻译)结果又不见了,我们又必须重头翻译。这是个很大的麻烦,建议以后每次 genstrings 之前把文件进行备份,减少重复工作。
8 、运行程序,效果如下(如果模拟器的多语言设置为简体中文):
当你把多语言设置改为 English ,则标签中的文本显示为英文了。
使用xcode4做iOS国际化
-
1 引入
app是针对国内市场的,但国内付费软件的状况不咋样,也就顺道卖卖全球市场了。针对这个需求,对app中的文字和app的软件名称做了国际化处理。具体步骤如下:
2 步骤
2.1中文国际化
1) 在项目的”supporting files”目录中右键”new file”然后在弹出窗口左侧选择IOS的resource项,在右侧就可以看到”String File”的图标。创建这个文件,新建的文件名要写成”Localizable.strings”;
2) 点击刚才创建的这个文件,选择xcode4的菜单中的”view”à”utilities”à”file inspect” 右侧会看到一些属性的信息;
3) 找到Localization这项,现在应该是空的,点”+”进行国际化的添加。因为我只制作了中文和英文,所以我加了”English”和”Chinese”,这里要注意的是”Chinese”要选择“zh_Hans”,这个是简体中文。
4) 添加好后就可以看到你项目目录下会生成对应的目录,zh-Hans.lproj和en.lproj 目录里面就是Localizable.strings的文件
5) 在xcode4中可以看到原先创建的Localizable.strings文件的左侧会多出一个三角图标,点击后会扩展出2个文件,一个中文,一个英文的。点击每个文件进行编辑就可以了。
6) 文件中的格式是"Key"="value";引号是必须加的,分号也是。
7) 在程序中需要使用国际化字符串的时候,调用NSLocalizedString(@"about", nil)就可以进行字符串的显示。其中第一个字符串就是文件中的key,第二个字符串可以使用nil代替也可以写一些注释。
2.2应用中文的国际化
1) 按照上面的步骤制作国际化文件,文件名是infoPlist.strings;
2) 文件中的key使用指定的CFBundleDisplayName,例子CFBundleDisplayName="game";
3) Info.plist,添加一个新的属性Application has localized display name, 设置其类型为YES;
4) Info.plist,中检查Bundle name和Bundle display name 是否为${PRODUCT_NAME}。