1. 程式人生 > >iOS多語言適配

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, nilnil];

        [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"?>

<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, nilnil];

    [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 = [[NSNumberFormatteralloc] init];

[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSString *numberString = [numberFormatter stringFromNumber:@(10000)];

UILabel *testLable = [[UILabelalloc] init];

testLable.text = [NSStringstringWithFormat: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"]) {

//中文啟動頁

    }

elseif ([currentLanguage isEqualToString:@"en-CN"]){

//英文啟動頁

    }

  8.上架時適配多語言

專案中適配完之後就是上架的多語言了,在app資訊和釋出中都有一個語言選項

   

選擇相應語言填寫好資訊即可。