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

來源:互聯網
上載者:User

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)]];

即可.
對於圖片的命名,可採用hello_en@2x.png之類的規則。

擷取當前語言類型

通常涉及到國際化,我們會先判斷當前使用的語言類型。
擷取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;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.