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"
如下圖:
(2) 自定義一個.strings檔案在裡面適配,然後通過NSLocalizedStringFromTable(@"自定義的KEY",@"檔名" , @"描述內容可為nil")獲取不同的檔案內容,應用內語言切換使用的就是這一種方式。
例子:
我們先建立用於中英文適配的兩個Localizable_CN.strings和Localizable_EN.strings檔案(名字可自定義)。
在Localizable_CN.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, 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";
第三步:應用
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 = [[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資訊和釋出中都有一個語言選項
選擇相應語言填寫好資訊即可。