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自定义内容

"tips" = "国际化";

"messages" = "你看不出来这是个内容吗!";

"cancelBtn" = "取消";

"sureBtn" = "确定";

在Localizable_EN.strings自定义内容

"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";

第三步:应用

应用名设置

第一步:添加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多语言适配的主要内容,如果未能解决你的问题,请参考以下文章

iOS 启动页多语言

JavaFX: 多语言适配

App Languages 批量化导入iOS多语言

第九章 多语言环境的支持和多屏幕的适配

第九章 多语言环境的支持和多屏幕的适配

多语言适配