ios10+swift3.0 app多语言——国际化和本土化

开发一款国际化的iOS App,则必须考虑支持多国家语言,如何实现呢?

第一、国际化——多国家语言;第二、本土化——数据、时间、货币格式等。

一、新建工程LSMultiLanguage

二、Main.storyboard设计界面

732FB274-8362-4378-B2D8-B7F3D482FDE4.png

如上图所示,默认语言是中文。为了国际化设计,要求不同国家的用户所见界面是适合当地文化(本土化),图片表示用户所在国家的不同,商品名称描述、数据格式、金额币种、日期时间。

三、增加多语言。(中、英文)

1、点击工程名-->右侧选中project名称-->点击左下角localizations下面的“+”,选择语言chinese(简体中文)

20150321094349970.png

2.弹窗口中勾选main.storyboard和luanchscreen,该操作的目的是实现界面设计时(非程序运行)相对固定的描述性文字的多语言,如“商品:”、“销量:”,等等。

20150321094711665.png

3.点击finish完成后,点击main.storyboard,Xcode右侧的属性监视窗口即可看到增加了chinese语言,同时我们把english语言也勾选。对launchscreen.xib执行同样操作。

20150321095151787.png

接下来,用main.storyboard界面举例,launchscreen.xib是类似操作。

三、设置界面标签描述文字的多语言

1.点击main.storyboard下的main.strings(中文),

2A39DEFC-B381-4048-932D-F698037FF1C4.png

右侧文件的内容是xcode自动生成的,“=”等号左侧的是对应界面元素的ID,右侧是对应的文本值,我们只需要修改=右侧内容,这里我们只需要设计标签文本的中文,“商品”、“销量”、“利润”、“时间”,其对应的右侧值稍后在代码中动态修改后显示。为了简单起见,可删除该部分内容,完成后如下图所示:

00CFFC69-8269-4608-B53D-609385F7367A.png

2.点击main.storyboard下的main.strings(english),设置标签文字的英文,并删除多余部分,如下图所示:

72A061F0-9634-4161-9546-40B54109839E.png

3.标签文字多语言设置完成,我们看看界面效果,点击main.storyboard-->右侧点击-->再点击如下图所示:


C0B7C1E6-EC60-4D78-92A2-F00630BBFBAB.png

然后点击视图右下加的语言,切换成english,在界面设计时(程序未运行)即可看见多语言效果:如上图

四、设计标签右侧对应值的多语言,这个在程序运行时动态设置。

1.界面上的值标签与viewcontroller代码关联,即对象抽象定义

054759ED-A53B-411D-B0EC-28C1E8C81663.png

2.向工程中添加新文件——多语言字符串文件,并命名文件为Localizable.strings


4CDDE724-964D-4C8A-828E-1B22450A52AF.png

3.设置Localizable.strings文件支持多语言中、英文,点击该文件,在xcode右侧属性监视窗口,点击localize...按钮

7F3785FA-12EE-4237-9ED8-7E3F605A7DB7.png

同时勾选english和chinese,

70132875-A787-49A5-8951-7E84DE461008.png

4.分别在localizable.strings(chinese)和localizable.strings(english)文件中设置商品值标签“苹果手机”的多语言文本:key=value

1F068481-8098-49C5-B59B-4170E7B360CA.png
1FCE4B87-2875-40A5-8CD8-9CB07558E89A.png

5.在viewcontroller代码文件中,视图加载完时设置商品名称,使用NSLocalizedString方法

lab_Product.text = NSLocalizedString("PRODUCT_NAME", comment: "商品名称")

6.设置数据,货币,日期时间格式本土化,不同地区数字格式不同,币种不同,日期时间格式不一样。我们分别自定义数字格式器、货币格式器和日期时间格式器:

 // 数字格式
    var numberFormatter:NumberFormatter{
        let formatter=NumberFormatter()
        formatter.numberStyle=NumberFormatter.Style.decimal
        return formatter
    }
    // 货币格式
    var currencyFormatter:NumberFormatter{
        let formatter=NumberFormatter()
        formatter.numberStyle=NumberFormatter.Style.currency
        return formatter
    }
    
    // 日期时间格式
    var dateFormatter:DateFormatter{
        let formatter=DateFormatter()
        formatter.dateStyle=DateFormatter.Style.medium
        formatter.timeStyle=DateFormatter.Style.medium
        return formatter
    }

7.在viewcontroller代码文件中
viewDidLoad()方法体内给相应的标签赋值,代码如下:

 override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        lab_Product.text = NSLocalizedString("PRODUCT_NAME", comment: "商品名称")
        
        lab_Sales.text=numberFormatter.string(from: 99999);
        //利润
        lab_Profit.text=currencyFormatter.string(from: 2347898)
        //日期
        lab_DateTime.text=dateFormatter.string(from: NSDate() as Date)
    }

8.设置模拟器语言为英文,运行后界面显示如下:

![803E1119-6F2F-4371-B56F-9C71EEED8ABC.png](http://upload
![Uploading BA8DFB72-08CD-4A86-8AC2-1F353A512B7F_778214.png . . .]images.jianshu.io/upload_images/1830761-2545448ed53015d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

设置模拟器语言为中文,运行后界面显示如下:

BA8DFB72-08CD-4A86-8AC2-1F353A512B7F.png

五、设置图片适应多语言。

不同语言时,图片需相应显示不同图片。
点击工程目录中的图片1.jpg文件,再在右侧属性监视窗口点击localiza...同时勾选english/chinese,完成后,如下图所示:

056F7D62-4457-4E00-AF01-7BBCEE9DAA24.png

在磁盘finder中打开flag图片所在的目录,打开en.lproj目录和zh-Hans.lproj目录,可见同时存在相同的flag图片,

106DDE29-E4C8-4BEF-9A7E-4142C74BFC50.png

此时用相同命名的图片替换en.lproj目录中的同名图片文件(已存在的一张图片1.jpg)。
这时项目中已经变了图片。

A6229744-2228-44B0-8C1C-493BB82129A6.png

六、设置xcode调试环境或切换iOS模拟器语言(中文、英文),运行app后可见效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容