iOS 国际化(多语言)

news/2023/6/7 23:25:33

一、应用程序国际化

包括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 文件拖到对应区域就可以,然后会反馈哪一行格式有问题,对应解决就好,非常方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4558430.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

linux软件安装管理与安装RPM时的挂载的概念

1.软件的分类: 其中的源码包有好处也有坏处, 其中的好处是:我们能看到里面的源代码,方便我们修改和学习其编程语法;还有一个就是不容易中病毒,因为Windows下的很多病毒对于linux来说都是不认识的。 其中…

Python基础《二十一:Web开发》

HTTP协议简介 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以: HTML是一种用来定义网页的文本,会HTML&#x…

迅为4412开发板(全能版)V_4.0 ubuntu 在Android4.4.4的内核下移植wifi

为4412全能版V_4.0 ubuntu 在Android4.4.4的内核下移植wifi 背景:由于厂家迅为的全能版的V4.0底板和V3.5底板的wifi部分有改动,所以需要重新移植wifi 软件基础 :基于迅为提供的全能版V_4.0的Android4.4.4源码编译出来的ubuntu内核之上移…

110、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

题目描述 解题思路 大题思路类似于 450.删除二叉搜索树中的节点(递归法迭代法) ,区别在于删除的是某一区域的节点值,并且要保留区域内部的节点值。 对于第一次找到结点值小于low的情况,有两种:&#xff08…

异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例52

欢迎关注异贝。异贝5G营销工具,今天给大家带来的案例是小超市的营销方案: 随着经济的不断发展,越来越多的大型企业都看中了四五线县城的人口和消费能力,许多深耕当地的经营场所,都收到了这些“外来物种”的强烈打击。…

线下实体店怎么引流?利用抖音线上推广店铺,【实操】

很多人对于开实体店的理解可能还停留在坐等客人上门这样的一个心理。我想说的是在互联网微电商的趋势下,实体店如果还在坐等上门客,那就注定不会长久。一定要懂得线上线下一起维护,用线下策划进行快速锁客,用线上方式维护好客户&a…

用户行为收集到HIVE

2.3 用户行为收集到HIVE 目标 目标 知道收集用户日志形式、流程知道flume收集相关配置、hive相关配置知道supervisor开启flume收集进程管理应用 应用supervisor管理flume实时收集点击日志 2.3.1 为什么要收集用户点击行为日志 用户行为对于某项目文章推荐来说,至…

各种manjaro安装问题大全:缺失依赖关系 无法下载 已损坏 签名未知信任 包结构错误

目录前言一、无法安装的解决方案1、切换成yay方式,或者yaourt方式安装2、有可能你没有安装包压缩解压等工具:二、无法下载的解决方案1、换源2、配置应用商店自带的添加/删除软件3、大招!解决某构建文件无法下载问题三、签名未知信任问题解决四…