iOS之应用程序国际化

作者: R呀呦 | 来源:发表于2015-11-08 20:58 被阅读17011次

一、程序国际化

准备工作:

1、首先我们要先创建一个工程,我们给他命名Internationalization-Demo,然后添加语言。

从代码中分离文本:

目前,应用展示的所有文本都是以硬编码字符串存在于Main.storyboard 和 ViewController里。为了本地化这些字符串,你需要把它们放在一个单独的文件中。他将会在包中简单地引用这些字符串,而不是在你的方法中进行硬编码。
Xcode使用带有 .strings 扩展名的文件来存储和检索app中使用的所有字符串,以支持每种语言。根据iOS 设备当前使用的语言,代码中一个简单的方法调用将会查找并返回要求的字符串。

2、创建一个.strings 扩展名的文件
打开File > New > File,选择Resource中Strings Fils,如图:
点击下一步,为文件命名为InfoPlist.strings,然后点击save。


3、创建完成后,你可以看到工程目录结构文件如下,单击InfoPlist.strings,查看右边的属性,在Localizable栏添加语言。如图


4、添加完成后打开对应语言文件,比如
English的添加:
CFBundleDisplayName = "hello world";

Chinese的添加:
CFBundleDisplayName = "世界 你好";


5、运行,如果你的模拟器是中文的,你会看到你的程序名称变成了 世界 你好


在设置中把语言设置成英文的,你就会看到你的程序名称变成了 hello world

二、内容国际化

1、新建一个Localizable.strings 文件 (Localizable.strings 是系统默认名字)
2、添加语言同上
3、添加语言内容
在Localization.strings 中,按照"key" = "value"的格式;然后使用时用NSLocalizedString(@"key", @"")读取内容; 如果不是用系统默认名字那么使用
Localization.strings English 文件添加
"key" = "hello world"

Localization.strings Chinese 文件添加
"key" = "世界 你好"


相关文章

网友评论

  • 杨振可:楼主,您好,我卡在了第一步,应该是因为删除了项目里的storybord,所以不能添加语言,请问有针对这种情况的解决办法吗?
    杨振可:@R呀呦 不是这样,是这样的,我的项目里删除了storybord,我用你说的这个步骤去添加的时候发现添加不上,目前已经解决,就是直接执行下一步,先去创建那个国际化loca...文件,创建完,这时候再去执行你说的第一步添加语言包,这时候就可以成功添加了,希望后来人可以知悉。
    R呀呦:project->info->localizations 添加语言
  • vision_colion:楼主我想问下,怎么设置默认语言,假如国际化的文件包含中英文,如果手机当前语言不是这两种,怎么设置默认的语言为英语
  • 巴图鲁:不错
  • 凡几多:您好楼主,这里面没有日语啊,怎么选择日语的啊?
    凡几多:@凡几多 噢,我知道了,在PROJECT的Localizations里添加上需要的语言就行了 :smile:
  • topws1:楼主你好,按照你的方法,我无法再 静态库中添加相关的文件,即使加上了Localizble.strings也无法作用于我的SDK包,就是那个Target选项无法选择我的静态库文件,求指导?
  • 哇哇卡:发现如果建文件的时候命名为:Localizable.strings 对应的调用:用 NSString *title = NSLocalizedString(@"key", @""); 这种方式会报错:Read failed:The data couldn't be read because it isn't in the correct format 。 然后换了个自定义的命名:XNLocalizable.strings
    这样调用:NSString *title = NSLocalizedStringFromTable(@"key", @"XNLocalizable", nil);
    就能运行通过,不会报错了,怀疑是不是不能用系统相同的命名,我用的Xcode7.2.
  • 哇哇卡:有用
  • 哆啦_:为什么给app名字取名字的时候报错,说是Read Failed: The Data could not be read because it isn"t in the correct format
    哆啦_:@D丶Seven 嗯嗯,谢了,已经弄好了
    烟影很美:@哆啦_ 没有分号
    哆啦_:@哆啦_ 创建那个文件没报错。但是只要往那个文件里写东西就会出错, 语言我也加了的
  • c885641d3fe7:为什么我建的info文件 里面没有包含english 和chinese两个文件
    R呀呦:@啊啦啦啦啦啦 你添加语言了么
  • 壹点微尘:楼主再把xib,图片国际化加上就更完美了;大家内容国际化的时候,按照楼主那样的去做,如果用的是xib拉的控件,就不要再适用上面的内容国际化了
  • 看晚霞洗澡的海鸥:app启动页图片的国际化会吗?就是根据不同的语言显示不同的启动页面图片
    R呀呦:@755fa32dcd55 要不你是怎么设置的图片?
    看晚霞洗澡的海鸥:app启动的时候跑得了这段代码吗?
    R呀呦:@755fa32dcd55 你这个需要进行图片的国际化,原理跟这个差不多,在不同的语言里分别设置不同的图片"imageName" = "China"; "imageName" = "English";
    [UIImage imageNamed:NSLocalizedString(@"imageName", nil)]

本文标题:iOS之应用程序国际化

本文链接:https://www.haomeiwen.com/subject/emochttx.html