iOS多言語開発
7752 ワード
iOS多言語開発
多くの主流appはマルチ言語(またはローカライズ)をサポートしており、システム言語に自動的に適応するものもあれば、ユーザーが修正を選択するものもあります.例えば、微信は以下の言語をサポートしており、システムに応じて適応したり、ユーザーが変更したりすることができます.
多言語ファイルの作成
プロジェクトで
command + n
ファイルを作成し、iOS
->Resource
->Strings File
ファイルを選択し、ファイル名をカスタマイズして作成します.多言語の追加
新しく作成した多言語ファイルを選択し、右側のサイドバーを展開し、サイドバーで
Localization
の下のLocalize...
ボタンをクリックし、English
を選択し、Localize
をクリックします.プロジェクトが
PROJECT
の中にあるLocalizations
を選択し、言語を追加します.1つ追加するたびに、新しい多言語ファイルの下に
.strings
という接尾辞名のファイルが1つ増えます.これが各言語に対応する言語ファイルです.中に格納されている言語文字はkey - value
形式で保存され、各ファイルのkey
は同じであり、value
はその言語の下の文字に対応している.例:中国語簡体字ファイル
File.strings(Chinese(Simplified))
に保存されているのは:"text"=" , 。";
英語の文書
File.strings(English)
に保存されているのは:"text"="hello,world.";
key
の値は一致しており、text
value
対の文字翻訳の各言語である.てきおうシステムげんご
言語ファイルにアクセスするマクロ定義
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
[bundle localizedStringForKey:(key) value:(val) table:(tbl)]
NSLocalizedStringFromTable(key, tbl, comment)
マクロ定義付与値を使用して多言語を表示するコントロールで、key
は多言語ファイルのkey
値で、tbl
は多言語ファイル名で、comment
は注釈で、nilを空で記入できます.使用方法は次のとおりです._label.text = NSLocalizedStringFromTable(@"text", @"File", nil);
マクロ
NSLocalizedString(key, comment)
を使用することもでき、tbl
ファイル名パラメータがない場合、エンジニアリング内の多言語ファイル名はLocalizable
でなければなりません.手動設定言語
言語ファイルは、エンジニアリング内で
.lproj
形式で格納されます.例えば、簡体字中国語はzh-Hans.lproj
、繁体字中国語はzh-Hant.lproj
、英語はen.lproj
です.手動で言語を設定することは、プロジェクトにどのファイルにアクセスさせるかです.appの言語設定を保持するには、次回appを開くか、前回設定した言語環境を開きます.言語設定は好み設定に属し、一般的に
NSUserDefaults
で格納される.環境設定を保存するには
NSUserDefaults *userd = [NSUserDefaults standardUserDefaults];
[userd setObject:@"zh-Hans" forKey:@"appLanguage"];//
[userd synchronize];
言語環境の設定:
NSString *lanType =[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]];
NSString *path = [[NSBundle mainBundle] pathForResource:lanType ofType:@"lproj"];
NSString *showValue = [[NSBundle bundleWithPath:path] localizedStringForKey:@"showTxt" value:nil table:@"File"];
_label.text = showValue;
初めてappを開く
デフォルト言語の手動設定
最初にappを開くと、ローカルのUserDefaultsには言語情報が格納されていません.この場合、コードを1つ保存することができ、その後は正常にアクセスできます.
didFinishLaunchingWithOptions
で簡単に判断すればいいです.なければ、簡体字中国語を保存します.NSUserDefaults *userd = [NSUserDefaults standardUserDefaults];
if (![userd objectForKey:@"appLanguage"]) {
[userd setObject:@"zh-Hans" forKey:@"appLanguage"];
[userd synchronize];
}
システム言語設定の表示
まずシステム環境の言語を取得し、appでサポートされている言語と比較します.appでサポートされている言語に現在のシステム言語がある場合は、その言語が表示され、ない場合はデフォルト言語が表示されます.
システム環境言語の取得:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
具体的な実装:
NSUserDefaults *userd = [NSUserDefaults standardUserDefaults];
if (![userd objectForKey:@"appLanguage"]) {//
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];//
if ([language hasPrefix:@"zh-Hans"]) {//
[userd setObject:@"zh-Hans" forKey:@"appLanguage"];//
} else if ([language hasPrefix:@"zh-TW"] || [language hasPrefix:@"zh-HK"] || [language hasPrefix:@"zh-Hant"]) {// ,
[userd setObject:@"zh-Hant" forKey:@"appLanguage"];//
} else if ([language hasPrefix:@"en"]) {//
[userd setObject:@"en" forKey:@"appLanguage"];//
}else{//
[userd setObject:@"zh-Hans" forKey:@"appLanguage"];//
}
}