你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS --- 多語言適配的注意事項

iOS --- 多語言適配的注意事項

編輯:IOS開發綜合

關於iOS APP的國際化適配,主要有以下幾點:

Localizable.strings文件

該文件主要用於字符串的多語言版本,包括Localizable.string(English), Localizable.strings(Chinese(Simplified)), Localizable.strings(Chinese(Traditional))等多個版本。內容格式如下:

// Localizable.string(English)
GUI_TEXT_CANCEL = Cancel;//取消
GUI_TEXT_BACK = Back;//返回
GUI_TEXT_SEND = Send;//發送
// Localizable.strings(Chinese(Simplified))
GUI_TEXT_CANCEL = 取消;//取消
GUI_TEXT_BACK = 返回;//返回
GUI_TEXT_SEND = 發送;//發送

storyboard和xib文件

Main.storyboard也會有多個版本,最重要的就是Base版本,即當前開發者使用語言的版本(如簡體中文)。Main.storyboard(Base)文件與常見的Main.storyboard文件無異,其相應文字已在Main.storyboard中標記。
另外,會有Main.strings(English), Main.strings(Chinese(Traditional))版本的兩個文件。格式如下:

// Main.strings(English)
/* Class = UITextField; placeholder = 新密碼; ObjectID = G9J-mp-XNR; */
G9J-mp-XNR.placeholder = New password;

/* Class = UITextField; placeholder = 原密碼; ObjectID = LbQ-a8-5ly; */
LbQ-a8-5ly.placeholder = Old password;

/* Class = UITextField; placeholder = 手機號碼; ObjectID = LrI-zH-3OD; */
LrI-zH-3OD.placeholder = Phone number;
// Main.strings(Chinese(Traditional))
/* Class = UITextField; placeholder = 新密碼; ObjectID = G9J-mp-XNR; */
G9J-mp-XNR.placeholder = 新密碼;

/* Class = UITextField; placeholder = 原密碼; ObjectID = LbQ-a8-5ly; */
LbQ-a8-5ly.placeholder = 原密碼;

/* Class = UITextField; placeholder = 手機號碼; ObjectID = LrI-zH-3OD; */
LrI-zH-3OD.placeholder = 手機號碼;

這兩個Main.strings文件的格式是自動生成的,我們僅需對應調整其中的placeholder文字即可,步驟請參考Main.storyboard的國際化。其中的OjbectID是唯一對應於一個UI控件的。
xib文件的國際化同Main.storyboard,不再贅述。

圖片等資源

最直接的方法,可以准備三個圖片, 在Localizable.strings中指定.:

imageName = ilike_en;

然後代碼中使用

[_imageView setImage:[UIImage imageNamed: NSLocalizedString(@“imageName”, nil)]];

即可.
對於圖片的命名,可采用[email protected]之類的規則。

獲取當前語言類型

通常涉及到國際化,我們會先判斷當前使用的語言類型。
獲取iOS系統的語言類型可使用:

NSArray *languages = [NSLocale preferredLanguages]; // 獲取語言字段
NSString *curLanguage = [languages firstObject]; // 獲取當前使用語言

對於curLanguage的值,iOS9在其中增加了地區代碼。如簡體中文,在iOS9之前為@”zh-Hans”,而在iOS9中為@”zh-Hans-CN”。所以iOS9之前的一些判斷如

[curLanguage isEqualToString:@zh-Hans]

在iOS9之後就會有問題,可使用

[curLanguage hasPrefix:@zh-Hans]

來代替。如下:

 //  當前語言是否中文簡體
-#define isZhHans [[[NSLocale preferredLanguages] firstObject] isEqualToString:@zh-Hans]
+#define isZhHans [[[NSLocale preferredLanguages] firstObject] hasPrefix:@zh-Hans]
 // 當前語言是否為中文繁體
-#define isZhHant [[[NSLocale preferredLanguages] firstObject] isEqualToString:@zh-Hant]
+#define isZhHant [[[NSLocale preferredLanguages] firstObject] hasPrefix:@zh-Hant]
 // 當前語言是否為中文繁體香港
-#define isZhHK [[[NSLocale preferredLanguages] firstObject] isEqualToString:@zh-HK]
+#define isZhHK [[[NSLocale preferredLanguages] firstObject] hasPrefix:@zh-HK]

獲取地區代碼

NSLocale *locale = [NSLocale currentLocale];
[locale localeIdentifier];

獲取Localizable.strings中內容

NSString *text = NSLocalizedString(@GUI_TEXT_BACK, @返回);

多語言的布局適配

比如,按鈕的標題在多語言的布局下可能導致布局出現問題。最簡單的做法通常是

btn.titleLabel.adjustsFontSizeToFitWidth = YES;

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved