グーグルで検索しましたが、解決策が見つかりませんでした:
基本的に、コードで使用しているLocalizable.stringsを設定しています。ただし、どういうわけかXIBでもこれらの値を参照できれば、言語ごとに1つの煩わしいXIBを作成する必要がなくなるので、とても便利です...
これは可能ですか?
グーグルで検索しましたが、解決策が見つかりませんでした:
基本的に、コードで使用しているLocalizable.stringsを設定しています。ただし、どういうわけかXIBでもこれらの値を参照できれば、言語ごとに1つの煩わしいXIBを作成する必要がなくなるので、とても便利です...
これは可能ですか?
UILabel のサブクラスを実装し、ペン先から初期化されるときにローカライズされた値を自動的に取得することができます。次に、XIB でトークン (または必要に応じて英語のテキスト) を設定し、UILabel にこの値からローカライズされたテキストを取得させます。
Localizable.strings
Interface Builderから直接設定する方法はありません。
NIB を翻訳する理由は、単語の長さが各言語で異なる可能性があるためです。したがって、言語ごとに nib のレイアウトを変更できます。
viewDidLoad
のメソッドでそれらを設定できるものUIViewController
。
- (void) viewDidLoad {
[supper viewDidLoad];
self.someLabel.text = NSLocalizedString(@"Some Label", @"Some label on some view.");
}
NSLocalizedString
導入しやすいメリットがあります。リスクは、新しい Gui 要素のエントリを追加するのを忘れる可能性があることです。
を使用itool
して、元の xib ファイルから文字列をダンプし、これらのダンプされた文字列を翻訳してから、翻訳された文字列を other-language-xib ファイルにロードできます。
と比較して、このようにすることにはいくつかの利点がありますNSLocalizedString
。
XIB を作成するときは、(以前のように) ローカライズされるように設定し、itool
この元の xib に対して実行して文字列を抽出します。文字列ファイルを目的の言語に翻訳し、その翻訳をローカライズされた xib にロードします。
グーグルでibtool --generate-strings-file
検索すると、いくつかのチュートリアルと例が見つかるはずです。
構文は次のようになります。
#dump original xib to a $xibfile.strings file:
ibtool --generate-strings-file Resources/English.lproj/$xibfile.strings Resources/English.lproj/$xibfile.xib
# offline: translate the $xibfile.xib, place it into the correct lproj folder
# then: merge translated $xibfile.strings with original xib to create localized xib
ibtool --strings-file Resources/de.lproj/$xibfile.strings --write Resources/de.lproj/$xibfile.xib Resources/English.lproj/$xibfile.xib
$xibfile.strings
Resources/English.lproj ディレクトリには、元の (英語) 文字列が含まれます。翻訳 $xibfile.strings
されたものは、適切なxx.lproj
ディレクトリに配置する必要があります。
ビルドスクリプトを xcode に追加すると、ビルドごとに翻訳のロードが呼び出されます。
IB は Localizable.strings の文字列を使用できませんが、 Base Internationalizationという別のオプションがあります。
つまり、必要な言語ごとに xib/storyboard に添付された個別の .strings ファイルを作成できます。その結果、各言語の独自の翻訳を含む xib が表示されます。したがって、Localizable.strings にある値の一部を複製できますが、コードを使用して設定したり xib ファイルをコピーしたりするよりも明確な方法です。
Base Internationalization については、Apple のドキュメントを参照してください。
コードでこれを行うことができます:
label.text = NSLocalizedString(@"key", @"comment");
しかし、ペン先全体をローカライズする以外に、ペン先だけでそれを行う方法はないと思います。私は確かに過去に別の方法を見つけていません。
Apple がサポートする .xib ファイルのローカライズ方法。これにより、言語/国ごとにテキストとレイアウトをローカライズできます。