当前位置: 首页 > 编程日记 > 正文

iOS项目的本地化处理(多国语言)

项目的本地化就是:iOS系统在不同语言环境下自动切换语言,从而实现一个app发布到全世界各个国家的AppStore上。

我们不仅仅需要在iOS项目中做本地化处理,在上架iOS APP的时候,也需要做对应的本地化设置哦。

iOS项目中需要处理的本地化大概有以下几点:

1.APP名称

2.字符串

3.图片

4.storyboard/xib文件

5.上架设置

前置工作

首先我们要在 PROJECT -> project name -> Localizations 下添加我们需要适配的语言,这里我添加中文和英文。

iOS项目的本地化处理(多国语言)

一、APP名称

项目名称的本地化是以 InfoPlist.strings 文件来控制的,所以我们先创建 InfoPlist.strings ,注意命名不要写错了。

iOS项目的本地化处理(多国语言)

选中刚创建的 InfoPlist.strings 并在右边属性面板点击 Localize... 。

iOS项目的本地化处理(多国语言)

选择需要本地化的语言,这个时候会发现在 InfoPlist.strings 下出现了几个本地化文件,这些文件就是做本地化的配置文件了。

iOS项目的本地化处理(多国语言)

项目名称本地化的 key 为 CFBundleDisplayName ,一定不能弄错,然后格式按照下面截图,注意分号不能少,否则无法识别。

iOS项目的本地化处理(多国语言)

设置模拟器的语言地区,分别在英文、中文环境下运行,看看是不是已经本地化成功了呢。

iOS项目的本地化处理(多国语言)

二、字符串

iOS项目可以用代码创建控件,也能用 storyboard/xib 创建控件,所以我们适配文字就得分2种情况。下面是代码创建一个Label,并做本地化处理的方式。

和本地化项目名称类似,创建 Localizable.strings 文件,然后再类似上面的操作,在右侧属性面板勾选需要适配的语言。

iOS项目的本地化处理(多国语言)

我们在对应的本地化文件中先定义好本地化所需要的键值对,这里的键就可以随自己喜好自定义了,不过建议有自己的格式和规范哦。

iOS项目的本地化处理(多国语言)

最后使用 NSLocalizedString(key, comment) 调用即可。

测试效果如下:

iOS项目的本地化处理(多国语言)

三、图片

图片本地化有两种方式,第一种和上面本地化字符串类似,因为我们创建图片是根据图片的名称来创建的,所以我们直接本地化图片的名称即可。

iOS项目的本地化处理(多国语言)

然后在代码中调用本地化文件中对应的 key 即可。

效果如下:

iOS项目的本地化处理(多国语言)

还有一种比较高大上的方式,选中图片在右侧属性面板中点击 Localize... ,并选则对应的语言。然后再选中另一张,也是相同的操作。

iOS项目的本地化处理(多国语言)

然后把图片都修改成相同的名称,其实在真实文件夹中,这两个图片是分别在不同的目录下的,所以可以同名。

iOS项目的本地化处理(多国语言)

使用的时候也是直接用图片名称即可,会自动根据当前语言环境去选择对应的图片。

效果如下:

iOS项目的本地化处理(多国语言)

四、storyboard/xib文件

storyboard/xib的本地化处理方式是一样的,比如这里选中 Main.storyboard 并在右侧属性面板点击 Localize... 并勾选对应的语言,开启这个文件的本地化。

iOS项目的本地化处理(多国语言)

在 Main.storyboard 中随便拖入一个 Label ,并右键选中 Main.storyboard 查看源代码,我们可以看到这个 Label 的唯一标识 id 。

iOS项目的本地化处理(多国语言)

然后我们就可以像本地化字符串一样,在本地化文件中适配对应的文字了。值得注意的是这里的 key 是 id.属性名,这个属性名在源代码里已经能够看到了,比如 Label 的文字属性这里的 text ,其他同理。所以:

iOS项目的本地化处理(多国语言)

效果如下:

iOS项目的本地化处理(多国语言)

五、上架设置

上架的时候,为了发布到各个地区的AppStore上去,我们也需要在上架的时候做一些本地化设置。在语言的选项处,添加我们需要适配的语言。

iOS项目的本地化处理(多国语言)

然后分别完善对应的APP标题、应用截图、应用描述、应用关键词等信息,最后提交审核即可。应用截图需要美工根据不同语言做不同的图片素材,根据实际情况而定。其他文字类的,就随便了。不过考虑到ASO优化和后期推广成本,具体按照公司实际要求去做本地化设置即可。

转载于:https://www.cnblogs.com/niceMan/p/5973904.html

相关文章:

synchronized底层原理_你用过synchronized吗?它的底层原理是什么?Java经典面试题来了...

并发编程已经成为程序员必备技能作为Java程序员,不懂得并发编程显然已经不能满足市场需求了,尤其是在面试过程中将处于被动地位,也有可能面试将就此终结。那么作为Java开发者的你,日常虽然可以基于Java的并发工具包实现并发编程&a…

一个比特币要挖多久?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 一个比特币要挖多久 比特币怎么挖能赚钱吗比特币要用专门的挖矿机来挖。平均一个挖到的时间几周到几个月不等。要看你的机器的规模了。 一台普通笔…

[UE4]死亡后调整视角

AddLocalOffset:本地坐标偏移。 脱离控制器操作 会影响“OnDie”方法里面的相机移动操作,而函数里面又不允许使用“Delay”方法,但可以使用“Set Timer By Function Name”方法。 转载于:https://www.cnblogs.com/timy/p/9036267.html

git 设置 key 到服务器,同步代码不需要输入用户名和密码

1 ssh-keygen -t rsa 2 vim ~/.ssh/id_rsa.pub 3. 添加到git 服务器,这样同步代码就不需要输入密码转载于:https://www.cnblogs.com/likwo/p/5975809.html

26个音序的正确写法和占格_部编语文汉语拼音音序表,示范朗读+视频教学

部编语文《汉语拼音音序表》♬点击上方绿标收听音频这位老师教的有点喜感,但读得基本是正确的。《汉语拼音方案》给每个字母规定了名称音读法,这是朗读字母表。小学汉语拼音字母表教学中存在两种读法,一种是《方案》规定的名称来读&#xff0…

分布式块存储架构

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1.块存储简介 块存储,简单来说就是提供了块设备存储的接口。用户需要把块存储卷附加到虚拟机(或者裸机)上后才可以与其交互。…

Tomcat_7.x压缩版_环境变量配置(亲测有效)

自行下载配置JDK, I。下载Tomcat7,解压到合适的目录,文件夹尽量浅,我的Tomcat路径是D:\tom7 II。配置环境变量 1.打开到环境变量,新建变量名:CATALINA_HOME,变量值:D:\tomcat2.打开P…

Atitit 为什么网络会有延时 电路交换与分组交换的区别

Atitit 为什么网络会有延时 电路交换与分组交换的区别 按道理,网络是电子设备联网,应该达到光速才对。。 本质上因为互联网基于分组交换而不是电路交换。 分组交换相当于队列方式,别人发你的数据包先存储在交换机队列里面存储,它空…

python自己做电子词典_python实现电子词典

本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下服务端#!/usr/bin/env python3from __future__ import unicode_literals# codingutf-8from socket import *import osimport pymysqlimport timeimport sysimport signalDICT_…

区块链技术开发三个优势

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链技术开发公司目前的开发空间之大难以述清,尤以对产业转型中的应用较为广泛,但由于区块链技术开发公司目前尚正处风口&…

BZOJ4551: [Tjoi2016Heoi2016]树

BZOJ4551: [Tjoi2016&Heoi2016]树 Description 在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个…

电力系统稳定与控制_基于数据驱动的电力系统稳定性分析

上期内容:世界电网大停电的经验和稳定控制的发展高薪诚聘电气工程教师、博士后近期学术会议公告,欢迎参会详情请按下方导引查阅,戳!戳!戳!特别致谢报告专家徐 岩 助理教授专家介绍Dr Yan Xu received th…

git-- 使用

git 使用时两个人冲突: Resolve conflicts 转载于:https://www.cnblogs.com/mafeng/p/5980075.html

以太坊RLP编码规则

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链中以太坊RLP编码规则! RLP(Recursive Length Prefix,递归长度前缀)编码算法,是以太坊中数据序列化/反序列化的主要方法…

openjudge-NOI 2.6基本算法之动态规划 专题题解目录

1、1759 最长上升子序列 2、1768 最大子矩阵 3、1775 采药 4、1808 公共子序列 5、1944 吃糖果 6、1996 登山 7、2000 最长公共子上升序列 8、2718 移动路线 9、2728 摘花生 10、2985 数字组合 11、2988 计算字符串距离 转载于:https://www.cnblogs.com/xqmmcqs/p/5979056.html…

js query复习

jquery:js框架; 主要区别在dom的操作 jq需要引入文件并且引入顺序在最上面; 找元素 操作元素 js:doucument.getElementById..classname,tagname,name jq:$(选择器) dom是js对象 jqDom是jquery对象 操作内容 js:dom.innerHTML(非表单元素) dom.value(表单元素) jq:jqDom.html(…

python 进程池 freeze_support_Python 多进程并发操作中进程池Pool的实例

在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,10几个还好&#…

区块链技术如何改变我们对DNA的看法

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 试想一下,有人得到了你的一些最私人的信息,并用它来攻击你,窃取你的身份,实施诈骗。这对于你来说特别…

input样式和修改

$(.input_class).on(focus,function(event){ if(event.keyCode 13){goSearch()}});input::-webkit-input-placeholder {color:#999; } .input_class{color:#333;border:none;vertical-align: .08rem;background: #F5F5F5;font-size:.65rem; } 转载于:https://www.cnblogs.com/…

python uwsgi_python Web开发你要理解的WSGI uwsgi详解

WSGI协议首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信…

接口设计文档_app端接口用例设计方法和测试方法(一)

前言接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍“请求层面的用例…

一个在raw里面放着数据库文件的网上例子

https://www.cnblogs.com/yutingliuyl/p/6880103.html转载于:https://www.cnblogs.com/strongdady/p/9052046.html

as3绕过策略文件给视频截图

接上篇 http://www.cnblogs.com/DarkMaster/p/5973593.html 这篇同样是在老外博客上找到的,分享给大家,再次感叹老外牛逼啊。 原文地址:http://gamespoweredby.com/blog/2014/11/netstream-playnull-bitmapdata-workaround/ 老规矩直接上关键…

数据库和区块链的异同

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 前几日有好友询问我关于数据库和区块链的异同,我觉得这个问题非常好,今天刚好有空把当时的聊天情况回忆了一下,可…

java并发编程实战:第十六章----Java内存模型

一、什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中编译器中生成的指令顺序,可以与源代码中的顺序不同处理器采用乱序或并行的方…

子div超出父div_菜鸟学 react props 子到父

我们都知道在 vue 中可以使用事件将子组件的数据传递给父组件,也可以通过拿到父组件的实例直接调用父组件的方法先来个子组件class ChildCom extends React.Component {constructor(props) {super(props)this.state {msg: 这是子元素的数据 hello ChildCom}}sendCh…

Linux笔记:使用Vim编辑器

Vi编辑器是Unix系统上早先的编辑器,在GNU项目将Vi编辑器移植到开源世界时,他们决定对其作一些改进。 于它不再是以前Unix中的那个原始的Vi编辑器了,开发人员也就将它重命名为Vi improved,或Vim。 为了方便使用,几乎所有…

实现中心钱包系统

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 很多业务上去中心化的应用上,需要很多中心化的管理,例如交易所,每秒交易量非常大,这都是 比特币&…

南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题

问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥输入 第一行:点的个数,如果点个数是n,他们的编号为0 ~ n-1 余下的行:每行…

小程序生命周期_来,简单说说小程序的生命周期?

简单说说小程序的生命周期?在小程序中生命周期分为三大类应用生命周期页面生命周期组件生命周期应用生命周期onLaunch(){ console.log(onLaunch监听小程序初始化);}onShow(){ console.log(onShow监听小程序显示);}onHide() { console.log(onLaunch监听小程序隐藏);}页面生命周…