一、应用程序国际化

包括app名称和各种权限的提示文字。

1.1 创建工程,再在“PROJECT”的“Info”里面,添加所需语言。

1.2 从代码中分离出文本

创建一个 “.strings” 扩展名的文件
来本地化字符串,需要把这些字符串全部放在一个单独的文件中。它将会在包中简单地引用这些字符串,而不是在实现、使用的方法中进行硬编码。
Xcode使用带有 “.strings” 扩展名的文件来存储和检索 程序中使用的所有字符串,以及支持的每种语言。根据iOS设备当前所使用的语言,在代码中一个简单的方法调用将会查找并返回符合设备语言要求的字符串。点击右键,选择“New File…”,选择“iOS”对应的“Resource”中的“Strings File”,如图:
点击“Next”,为文件命名为InfoPlist.strings,然后点击“save”。

1.3 添加语言

创建完“InfoPlist.strings”(命名随意~),工程目录结构文件如下,单击“InfoPlist.strings”,查看右边的属性,在Localizable栏添加语言。如图:

添加之后,效果如下:


这个时候就可以在对应语言的“InfoPlist.strings”文件中,添加所支持的字符串了。

中文对应的文件里添加:

"CFBundleDisplayName" = "App名字";
"NSCameraUsageDescription" = "App 需要访问您的相机来扫描二维码绑定设备";
"NSContactsUsageDescription" = "App 需要访问您的通讯录来实现通讯录备份";
"NSPhotoLibraryAddUsageDescription" = "App 需要访问您的相册来保存图片或视频";
"NSPhotoLibraryUsageDescription" = "App 需要访问您的相册来发送图片或扫描二维码";
"NSLocationWhenInUseUsageDescription" = "App 需要您允许定位以把位置保存到照片中";

英文对应的文件里添加:

"CFBundleDisplayName" = "=App Name";
"NSCameraUsageDescription" = "App needs access to your camera to scan QR code binding devices";
"NSContactsUsageDescription" = "App needs to access your address book to achieve address book backup";
"NSPhotoLibraryAddUsageDescription" = "App needs access to your photo album to save images or videos";
"NSPhotoLibraryUsageDescription" = "App needs to access your photo album to send pictures or scan QR code";
"NSLocationWhenInUseUsageDescription" = "App requires you to allow positioning to save the location to the photo";

二、内容国际化

2.1 创建一个“Localizable.strings” 文件

创建一个“Localizable.strings” 文件(点击右键,选择“New File…”,选择“iOS”对应的“Resource”中的“Strings File”)。

注意:Localizable.strings 是系统默认名字,不能更改。

2.2 添加内容

添加语言在Localization.strings 中,按照"key" = “value"的格式。在使用时,用NSLocalizedString(@“key”, @”")读取内容。

Localization.strings (English)文件中,添加:

"第一!绝对不意气用事!" = "The first!Absolutely not impulsive!";
"第二!绝对不漏判任何一件坏事!" = "The second!Definitely not missing any bad thing!";
"第三!绝对裁判的公正漂亮!" = "The third!Absolutely the referee just beautiful!";

Localization.strings (Chinese)文件中,添加:

"第一!绝对不意气用事!" = "第一!绝对不意气用事!";
"第二!绝对不漏判任何一件坏事!" = "第二!绝对不漏判任何一件坏事!";
"第三!绝对裁判的公正漂亮!" = "第三!绝对裁判的公正漂亮!";

如图所示:

调用:

  NSString * label_Str1 = NSLocalizedString(@"第一!绝对不意气用事!", nil);NSString * label_Str2 = NSLocalizedString(@"第二!绝对不漏判任何一件坏事!", nil);NSString * label_Str3 = NSLocalizedString(@"第三!绝对裁判的公正漂亮!", nil);NSString * label_Str = [NSString stringWithFormat:@"%@\n%@\n%@",label_Str1,label_Str2,label_Str3];UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(10, 240, self.view.frame.size.width, 120.f)];label.text = label_Str;//自动换行label.numberOfLines = 0;[self.view addSubview:label];

优化: 在pch头文件中,定义一个国际化对应的宏!

 //宏定义国际化字符#define NSLocalString(a)   (NSLocalizedString(a, nil))使用:NSString * label_Str1 = NSLocalString(@"第一!绝对不意气用事!");

判断支持的语言、当前语言:

NSArray *languages = [NSLocale preferredLanguages];
NSLog(@"支持的languages:%@",languages);NSString *currentLanguage = [languages objectAtIndex:0];
NSLog(@"当前语言currentLanguage:%@",currentLanguage); //日语:ja-CN、法语:fr-CN、fr-CA

三、多语言文件编译报错

项目实现国际化功能,编译时遇到错误,read failed: Couldn’t parse property list because the input data was in an invalid format。

3.1 问题分析

数据格式错误一般会有下面几种情况:

末尾少了分号
字符使用了全角字符(中文字符)
中间少了 =
少了双引号或者引号没有成对出现
文本中出现了不必要的特殊字符
这是个小问题,主要看怎么快速查找出问题,下面给出三种方法

3.2 问题解决

3.1 肉眼检索

最简单最直接的方式,肉眼检索,找到问题改正。

这种方式一般适用于文件小,内容少的情况。

如果内容多,有十几个国家的翻译文件,这种方法显然不合适。

3.2 减半筛查

把翻译文件中的内容每次注释掉一半,再编译,如果没有报错,问题就出现另外一半。将另外一半再注释掉一半,再编译,如此重复也能快速的排查出问题所在。

3.3 借助工具 Localizable (付费)

Localizable 是 Mac 上的一款桌面工具,在商店搜索 Localizable 就可以找到,使用方式也很简单,只需要将 Localizable.strings 文件拖到对应区域就可以,然后会反馈哪一行格式有问题,对应解决就好,非常方便。

iOS 国际化(多语言)相关推荐

  1. iOS 国际化多语言设置 xcode7

    iOS 国际化多语言设置 方式一: 1. 在storyboard中创建好UI,然后在 project 里面  Localizables 栏目里面,添加你需要的语言:默认是Englist; 比如这里我添 ...

  2. ios架构篇-2 国际化多语言

    关键字:ios,国际化,多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文,包含页面.app名称.系统默认权限弹框(如相机相册权限) 思路:app首次初始设置为系统语言, ...

  3. iOS开发 - App语言国际化

    前言 语言本地化,又叫做语言国际化.是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言.往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要 ...

  4. iOS国际化(多国语言设置)

    1. 基本设置 第一步:先在Project的info里添加所需要支持的语言,这里选择的是Chinese(Simplified)和English-Development Language,点击Finis ...

  5. IOS多国语言Localize方法

    IOS多国语言Localize方法 摘要: 使用一系列的NSLocalizedString函数就是localize的本质.NSLocalizedString(NSString *key, NSStri ...

  6. flutter 全选_Flutter ios 国际化(复制粘贴 中英文切换等问题)

    前提 在做flutter ios 国际化的时候遇到长按文本框崩溃的问题,然后google到一堆写法是重写cupertinoLocalization的奇怪做法,然后还千篇一律都是这么改的,其实不用那么麻 ...

  7. [iOS] 国际化详解

    PS:修改设备系统语言方法 设置 -> 通用 -> 语言与地区 -> iPhone 语言 Settings -> General -> Language & Re ...

  8. Android架构篇-2 国际化多语言

    Android架构篇-2 国际化多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文 4.我的->设置->切换语言 思路:app首次初始设置为系统语言,用户在a ...

  9. 系列:iOS开发-C语言基础

    #系列:iOS开发-C语言基础 之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90% ...

最新文章

  1. Vue底层实现原理概述
  2. 新 开通 自己 IT 博客
  3. URI结构和ABNF操作符
  4. 【TensorFlow】TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别
  5. 云计算仿真框架CloudSim介绍(截图版)
  6. Android文本输入框EditText方法说明和属性
  7. 移植交叉编译pcDuino + busybox 成功搭建最小linux系统
  8. 远程服务器学习总结篇1:ssh
  9. 关于android studio报错Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.
  10. C语言正交表测试用例,用正交表设计测试用例
  11. Simulink提速方式
  12. 利用注册表更改文件默认打开方式及图标
  13. Building fresh packages...
  14. 地理生物结业考_不到30天,初二学年地理、生物结业考试开考,老师们说……...
  15. 跟着狂神学Docker(精髓篇)
  16. 解决MyEclipse中resetting selection长耗时的问题
  17. sudo apt install python3-pip安装失败
  18. 某校2019专硕编程题-完全数
  19. Eclipse Javaee版本下载与安装(不含jdk)
  20. 4.25学习笔记 哈希表

热门文章

  1. y67和y67a有什么区别_Y67与Y67A的区别是什么?
  2. 社会心理学(1) 社会心理学的定义
  3. word中的高级查找替换
  4. C++之最小生成树算法(Prim)
  5. Toocold之100层地狱
  6. PTA-C语言 吃鱼还是吃肉
  7. 站长工具 - Web前端利器
  8. 布尔什维克 孟什维克
  9. confluence表格插入日历组件 日期组件
  10. 植物2 IOS 怎么实名认证_王者荣耀实名注册网站地址入口汇总 王者荣耀2019怎么实名认证...