iOS多语言适配
Posted 漂泊_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS多语言适配相关的知识,希望对你有一定的参考价值。
1. 基本设置
(1) Localizable.strings的Strings File文件
第一步: 创建一个名字为Localizable.strings的Strings File文件(名字不可以错).在各个语言文件里面编写自定义的键值对,然后使用系统函数NSLocalizedString(@"自定义的key", "描述可为nil")通过key拿到对应的value值;
第二步:在Project的info里添加所需要支持的语言,这里选择的是Chinese(Simplified)和English-Development Language,会让你勾选语言适配方式,点击Finish。
第三步:创建Localizable.strings文件(注意:文件名最好不要随意更改)作为多语言对应的词典,存储多种语言。
(1)点击Localizable.strings文件右侧Localize…
(2)继续在Localization里添加所要支持的语言,将其勾选上。
第三步:最后就可以在Localizable.strings里随意设置所需要支持的语言啦。
如下图:
第四步:应用
(1)Localizable.strings内设置格式:
"testName" = "测试名称"
(2)NSLocalizedString代替String:
NSLocalizedString(@"testName",nil)
如下图:
(2) 自定义一个.strings文件在里面适配,然后通过NSLocalizedStringFromTable(@"自定义的KEY",@"文件名" , @"描述内容可为nil")获取不同的文件内容,应用内语言切换使用的就是这一种方式。
例子:
我们先创建用于中英文适配的两个Localizable_CN.strings和Localizable_EN.strings文件(名字可自定义)。
在Localizable_CN.strings自定义内容
在Localizable_EN.strings自定义内容"tips" = "国际化";
"messages" = "你看不出来这是个内容吗!";
"cancelBtn" = "取消";
"sureBtn" = "确定";
"tips" = "tip";
"messages" = "messages";
"cancelBtn" = "cancle";
"sureBtn" = "fixed";
然后在storyboard中拖入两个按钮并添加点击事件,通过文件名来切换不同的语言.
//
// ViewController.m
// -多语言-I18N-国际化
//
// Created by apple on 16/10/5.
// Copyright (c) 2016年 lilinjie. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,copy) NSString *fileName;
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
self.fileName = @"Localizable_CN";
- (IBAction)chineseBtnClick
self.fileName = @"Localizable_CN";
- (IBAction)englishBtnClick
self.fileName = @"Localizable_EN";
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
NSString *tips = NSLocalizedStringFromTable(@"tips", self.fileName, nil);
NSString *messages = NSLocalizedStringFromTable(@"messages", self.fileName,nil);
NSString *cancelBtn = NSLocalizedStringFromTable(@"cancelBtn",self.fileName,nil);
NSString *sureBtn = NSLocalizedStringFromTable(@"sureBtn", self.fileName,nil);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:tips message:messages delegate:nil cancelButtonTitle:cancelBtn otherButtonTitles:sureBtn, nil nil];
[alert show];
@end
项目中可以通过对全局文件名的更改来切换不同的语言.
2.StoryBoard设置
storyboard同Localizable.strings类似。
第一步:选中storyboard,选择ShowtheFileInspector,在Localization选择所需要支持的语言。
第二步:在Main.strings(Chinese(Simplified))和Main.strings(English)里设置语言。
Main.strings里的格式比较特殊,如下所示:
/* Class = "UILabel"; text = "测试"; ObjectID = "C9P-Sr-3Z4"; */
"C9P-Sr-3Z4.text" = "测试";
获得Object ID 的方法:
3. XML
我们自定义创建个名为Localize_XML.strings的文件
如果你不会XML格式的话也没事,在info.plist 右键->Open As ->Source Code中可以看见这种格式.
然后复制过来删掉中间的内容留下一对键值对来进行操作
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>tips</key>
<string>tip</string>
<key>messages</key>
<string>你看不出来这是一个内容嘛?</string>
<key>cancelBtn</key>
<string>取消</string>
<key>sureBtn</key>
<string>确定</string>
</dict>
</plist>
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
self.fileName = @"Localize_XML";
NSString *tips = NSLocalizedStringFromTable(@"tips", self.fileName, nil);
NSString *messages = NSLocalizedStringFromTable(@"messages", self.fileName,nil);
NSString *cancelBtn = NSLocalizedStringFromTable(@"cancelBtn",self.fileName,nil);
NSString *sureBtn = NSLocalizedStringFromTable(@"sureBtn", self.fileName,nil);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:tips message:messages delegate:nil cancelButtonTitle:cancelBtn otherButtonTitles:sureBtn, nil nil];
[alert show];
4.图片设置
图片设置也和Localizable.strings类似,图片资源存放在Images.xcassets里,使用时将不同语言的图片资源在Localizable.strings里一一对应设置;
第一步:添加图片
第二步:往Localizable.strings中添加图片名
Localizable.strings (English)
"imageName" = "picEnglish";
Localizable.strings (Chinese(Simplified))
"imageName" = "picSimple";
第三步:应用
5 应用名设置
第一步:添加InfoPlist.strings
文件名命名为:InfoPlist.strings (注意取名字的时候必须是InfoPlist.strings,否则的话是无效的。创建完之后点击InfoPlist.strings文件在右部选项框有个localization的本地化选项)
第二步:添加应用名
InfoPlist.strings (English)
"CFBundleDisplayName" = "EnglishName";
InfoPlist.strings (Chinese(Simplified))
"imageName" = "中文名";
6 货币值设置
货币显示在不同的国家是有区别的,例如:10000可以写作”10,000”也能写作”10.000”。针对这种情况可以使用NSNumberFormatter格式化,例如:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *numberString = [numberFormatter stringFromNumber:@(10000)];
UILabel *testLable = [[UILabel alloc] init];
testLable.text = [NSString stringWithFormat:NSLocalizedString(@"testNum:%@", nil), numberString];
7 启动页设置
根据内容去判断:
获得当前设备的语言
//取得用户默认信息
NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ]; // 取得iPhone 支持的所有语言设置
NSArray *languages = [defaultsobjectForKey : @"AppleLanguages" ];
NSLog (@"%@", languages);
// 获得当前iPhone使用的语言
NSString* currentLanguage =[languages objectAtIndex:0];
NSLog(@"当前使用的语言:%@",currentLanguage);
if ([currentLanguage isEqualToString:@"zh-Hans-CN"])
//中文启动页
else if ([currentLanguage isEqualToString:@"en-CN"])
//英文启动页
8.上架时适配多语言
项目中适配完之后就是上架的多语言了,在app信息和发布中都有一个语言选项
选择相应语言填写好信息即可。
以上是关于iOS多语言适配的主要内容,如果未能解决你的问题,请参考以下文章