iOS开发进阶 - 项目的本地化处理(多语言开发)
移动端访问不佳,请访问我的个人博客
最近项目本地化,需要支持多国语言,下面将本地化的步骤记录下来,方便查找使用,步骤很简单,有些地方也有坑,希望大家看后少走弯路~~
什么是本地化
本地化说直白点就是多语言开发,通过系统语言来判断应用使用的哪种语言,实现应用的本地化开发
本地化处理需要处理的文件
- 本地化应用程序的
info.plist
- 本地化字符串处理(项目中所涉及的字符串)
- 本地化图片
- XIB和storyboard的本地化处理
- 其他文件,比如
csv
等等
让我们的项目支持本地化
首先我们只有设置成支持多语言了,我们才能在展示项目名称和项目中的字符串等将语言进行切换,具体操作如下图所示:
在如上图所示的地方添加你需要支持的语言就行了,我这里是添加了简体汉语和英语
如何判断当前系统使用的语言
我们使用Locale
这个类来判断当前的系统语言,方法:
//获取当前的locale
let locale = Locale.current
//返回本地语言环境的语言代码,或者如果没有零
//例如,对于地区“zh-Hant-HK”,返回“zh”
let languageCode = locale.languageCode
//返回该地区代码的语言环境,或者如果没有零
//例如,对于地区“zh-Hant-HK”,返回“HK”
let regionCode = locale.regionCode
同过以上的代码基本上能清楚的知道当前系统的使用的语言
获取系统支持的所有语言
同样我们也是通过Locale
来获取系统支持的所有语言
//返回可用“语言环境”标识符的列表
let availableList = Locale.availableIdentifiers
//返回一个可用“语言环境”语言代码的列表
let languageCodeList = Locale.isoLanguageCodes
//返回一个可用“语言环境”地区代码的列表
let languageCodeList = Locale.isoRegionCodes
如何本地化info.plist
1.首先我们建一个名称叫InfoPlist.strings
的本地化文件,记住名称必须叫InfoPlist.strings
2.选择让InfoPlist.strings
支持的语言,如下图所示:
3.在InfoPlist.strings
分别写入你想本地化的值,如下图所示 (格式如下所示,以分号结尾):
如何获得info.plist中对应的Key
我们可以通过打开info.plist
的源码来获取到对于的Key值,如下图所示 :
本地化字符串处理
本地化字符串处理原理上跟infoPlist的处理差不多,只是我们需用配合一个方法来使用它:
let str = NSLocalizedString("需要本地化的字符串", comment: "")
默认使用NSLocalizedString
这个方法时我们是获取mainBundle
中一个名字叫Localizable.strings
的本地化文件,所以我们一般只需要建一个名字叫Localizable.strings
的文件即可,方法步骤跟建立infoPlist.strings
类似(传送门)
使用自定义的本地化文件
使用自定义的本地化文件也很容易,也是之前的方法,我们只需要多填一些参数就可以了:
//返回一个本地化的字符串,默认使用main bundle,如果没有指定一个
public func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String
以上就是NSLocalizedString
这个方法的所有参数,其中的tableName就是本地化文件的名称,默认就是Localizable.strings
,自定义的话只需要建立一个新的,然后名称填你自己建立的本地化文件即可.
XIB和storyboard的本地化处理
XIB
和storyboard
的方法也很简单,跟本地放字符串类似,不过是本地化的XIB
文件,如下图所示:
XIB
和storyboard
的本地化又两种方式,如上图所示,一种是以本地化文件的方式实现,就是以.strings
的本地化文件;另外一种是以XIB
或storyboard
的方式展示,具体如下图所示 :
本地化图片和其他文件
对于本地化图片和其他文件就比较费劲一点了,因为Xcode中图片并没有支持本地化,我们只有通过代码判断来决定使用相对于的本地化图片和文件了,判断方法的传送门
本地化中所遇到的问题
在本地化中必须谨记一个问题,就是必须按本地化文件的格式来写入文件,因为本地化文件并不能检查出你分号后面是否多多余的字符串,造成的后果就是本地化文件失效!!
借鉴了许多大神的博客,总结了一篇比较全的,希望大家能学到东西,又什么疑问可以留言,谢谢大家的阅读~
iOS开发进阶 - 项目的本地化处理(多语言开发)的更多相关文章
- HTML5游戏开发进阶指南
<HTML5游戏开发进阶指南> 基本信息 作者: (印)香卡(Shankar,A.R.) 译者: 谢光磊 出版社:电子工业出版社 ISBN:9787121212260 上架时间:20 ...
- OpenDaylight开发hello-world项目之功能实现
OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...
- OpenDaylight开发hello-world项目之代码框架搭建
OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...
- OpenDaylight开发hello-world项目之开发环境搭建
OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...
- OpenDaylight开发hello-world项目之开发工具安装
OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...
- Kotlin开发springboot项目(一)
Kotlin开发springboot项目(一) Kotlin语言与Xtend语言有很多相似之处 为什么会存在这么多JVM语言? 现存的语言提供了太过受限制的功能,要不就是功能太过繁杂,导致语言的臃肿和 ...
- 10个Spring Boot快速开发的项目,接私活利器(快速、高效)
本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...
- 从零开始搭建Go语言开发环境
一步一步,从零搭建Go语言开发环境. 安装Go语言及搭建Go语言开发环境 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://gol ...
- 安装Go语言及搭建Go语言开发环境
一步一步,从零搭建Go语言开发环境. 安装Go语言及搭建Go语言开发环境 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://gol ...
随机推荐
- CH5103 传纸条【线性dp】
5103 传纸条 0x50「动态规划」例题 描述 给定一个 N*M 的矩阵A,每个格子中有一个整数.现在需要找到两条从左上角 (1,1) 到右下角 (N,M) 的路径,路径上的每一步只能向右或向下走. ...
- 在虚拟机中的搭建Web服务器(CentOS)
1.制作本地yum源 相关可查看:http://www.cnblogs.com/xiaomingzaixian/p/8424290.html 2.安装JDK 上传上传jdk-7u45-linux-x6 ...
- 2017Summmer_上海金马五校 F题,G题,I题,K题,J题
以下题目均自己搜 F题 A序列 一开始真的没懂题目什么意思,还以为是要连续的子串,结果发现时序列,简直智障,知道题意之后,好久没搞LIS,有点忘了,复习一波以后,直接双向LIS,处理处两个数组L和R ...
- zipline目录结构
下面列出了zipline主要的目录和文件结构和它的说明 ├── ci - 持续集成相关 ├── conda - 生成conda 包相关 ├── docs - 文档 │ ├── notebooks - ...
- MySQL和时间戳有关的函数
1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()mysql> select current_timestamp, current ...
- C++之贪吃蛇
#include<iostream> #include<cstdio> #include<cstdlib> #include<ctime> #inclu ...
- python学习笔记——字符串
类方法string.upper(str)需要引入string模块,实例方法str.upper()不需要引入string模块 无与伦比的列表解析功能 # coding=utf-8 # 列表解析 prin ...
- maven 整合 ssm 异常分析
异常一:使用tomcat 7 启动没问题访问(JSP)页面就报错:org.apache.jasper.JasperException: Unable to compile class for JSP ...
- (转)extern关键字两种场景的使用
第一种场景 -- extern extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其它文件中可见.用其声明的变量或函数应该在别的文件或同一文件的其它地方定义. 例如语句:exter ...
- Selenium-Grid2 配置RemoteWebDriver
为什么要使用Selenium Grid ? 分布式运行大规模的Test 能够通过一个中央点,很容易的运行不同OS上的不同browser 最小化对Grid的维护时间,并能充分利用虚拟设备 Seleniu ...