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

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

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

1.APP名称

2.字符串

3.图片

4.storyboard/xib文件

5.上架设置

前置工作

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

一、APP名称

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

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

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

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

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

二、字符串

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

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

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

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

 
1
2
3
4
UILabel *testLabel = [[UILabel alloc] init];
testLabel.frame = CGRectMake(150, 200, 100, 30);
testLabel.text = NSLocalizedString(@"test", @"测试备注");
[self.view addSubview:testLabel];

测试效果如下:

三、图片

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

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

 
1
2
3
UIImageView *testImageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:NSLocalizedString(@"phototest", "测试图片备注")]];
testImageView.frame = CGRectMake(100, 300, 100, 100);
[self.view addSubview:testImageView];

效果如下:

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

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

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

 
1
2
3
UIImageView *testImageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"photo.png"]];
testImageView.frame = CGRectMake(100, 300, 100, 100);
[self.view addSubview:testImageView];

效果如下:

四、storyboard/xib文件

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

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

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

效果如下:

五、上架设置

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

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

iOS项目的本地化处理(多国语言)的更多相关文章

  1. ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

    ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单.以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤. 一 几个必要概念 (一) 支持全 ...

  2. iOS开发进阶 - 项目的本地化处理(多语言开发)

    移动端访问不佳,请访问我的个人博客 最近项目本地化,需要支持多国语言,下面将本地化的步骤记录下来,方便查找使用,步骤很简单,有些地方也有坑,希望大家看后少走弯路~~ 什么是本地化 本地化说直白点就是多 ...

  3. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  4. 高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

    偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下. 当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource. 这是当时基于自己另一款 IDE 软件抽 ...

  5. iOS项目的目录结构和开发流程

    转自无网不剩的博客 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法.   目录结构 AppDelegate Models Ma ...

  6. iOS 应用程序本地化

    由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...

  7. WPF应用程序支持多国语言解决方案

    原文:WPF应用程序支持多国语言解决方案 促使程序赢得更多客户的最好.最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分.本文介绍四种实现WPF应用程序支持多国语言 ...

  8. c#开发之多国语言解决方案gnu.gettext + poedit

    1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...

  9. iOS学习——iOS项目Project 和 Targets配置详解

    最近开始学习完整iOS项目的开发流程和思路,在实际的项目开发过程中,我们通常需要对项目代码和资料进行版本控制和管理,一般比较常用的SVN或者Github进行代码版本控制和项目管理.我们iOS项目的开发 ...

随机推荐

  1. C#与Java多态方面的语法差异

    C++.C#.Java,无奈三种语言让我多次混淆,多次搞清楚,不写个Demo我想还是会忘记的. 就好像是一个满水的杯子,倒掉一点,才能装下更多. 有时候博客就是一个倒水的地方,可以让我们清空自己,然后 ...

  2. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  3. NSMutableAttributedString(转)

    NSMutableAttributedString计算高度的问题 _label_page2_1 = [[UILabel alloc] init]; _label_page2_1.numberOfLin ...

  4. XML中<beans>中属性概述

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  5. 不用写Windows服务实现定时器功能(FluentScheduler )

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  6. 最小化安装centos7不能执行ifconfig命令的解决方法

    操作环境 虚拟机:VirtualBox 5.0.4 for Windows 操作系统:CentOS-7-x86_64-Minimal-1503-01.iso 问题描述 登录系统之后,输入ifconfi ...

  7. LCA + 树状数组 + 树上RMQ

    题目链接:http://poj.org/problem?id=2763 思路:首先求出树上dfs序列,并且标记树上每个节点开始遍历以及最后回溯遍历到的时间戳,由于需要修改树上的某两个节点之间的权值,如 ...

  8. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

  9. TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之一

    Marionette牵线木偶,Backbone是脊骨的意思,Marionette是基于Backbone做扩展库,可以理解为把脊骨骨架绑线扯着变成牵线木偶动起来哈哈,使backbone更易使用呵呵! 构 ...

  10. zeppelin-0.6.0安装配置

    从http://zeppelin.apache.org/download.html 下载 zeppelin-0.6.0-bin-all.tgz 解压 修改zeppelin-site.xml,配置端口 ...