アプリをローカライズ
Stringsdict ファイル形式
stringsdictファイル (ファイル拡張子が .stringsdict のファイル) は、言語の複数の異形と表示幅の異形の両方を定義するために使用されるプロパティリストです。stringsdict ファイルには、キーがローカライズ可能な文字列であり、値が複数の異形または幅の異形のいずれかを含む辞書である辞書が含まれています。
複数の異形
複数の異形 は、言語の複数の規則に依存する、書式化された文字列の異なる翻訳です。キーは書式化された文字列 (%d file(s) remaining) で、値は以下のように異形を含む辞書です。
<plist version="1.0"> <dict> <key>%d file(s) remaining</key> <dict> … </dict> <key>%d service hour(s)</key> <dict> … </dict> <key>%d award(s)</key> <dict> … </dict> </dict> </plist>
コードでは、変数を含む同じ形式の文字列 (たとえば、@”%d file(s) remaining”, @”%d service hour(s)” および @”%d award(s)” など) を NSLocalizedString マクロに渡します。
書式化された文字列辞書 のキーは以下のとおりです。
- NSStringLocalizedFormatKey:変数を含む書式化文字列。
変数の前には %#@ 文字が続き、その後に @ 文字が続きます。たとえば、files は以下の書式化文字列の変数です。
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
NSStringLocalizedFormatKey 形式の文字列に表示される変数ごとに、別の複数の異形の辞書があります。複数の異形辞書は、NSLocalizedString マクロによって返される書式化文字列を決定します。これには、言語の複数の文法的な異形ごとに異なる書式化文字列が含まれています。
複数の異形辞書 のキーは以下のとおりです。
- NSStringFormatSpecTypeKey:言語規則の型を指定します。
- NSStringFormatValueTypeKey:整数の文字 d のように、数値の文字列書式化指定子。
- zero, one, two, few, many, other:言語固有の複数カテゴリの書式化文字列。各言語のカテゴリと複数規則については、CLDR 言語複数規則 にアクセスしてください。other のキーが必要です。
可能な値は NSStringPluralRuleType のみで、これは言語の複数の異形を示します。
たとえば、英語の files 変数の複数の異形辞書は以下のとおりです。
<key>files</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <key>one</key> <string>%d file remaining</string> <key>other</key> <string>%d files remaining</string> </dict>
数値が 1 の場合、ローカライズされた文字列は @”1 file remaining” になります。数値が 2 の場合、ローカライズされた文字列は @”2 files remaining” になります。
複数の異形カテゴリの意味は言語に依存し、すべての言語が同じカテゴリを持つわけではありません。たとえば、英語は複数の形を表すために one と other のカテゴリのみを使用します。アラビア語には、zero, one, two, few, many, および other のカテゴリのさまざまな複数形があります。ロシア語も多数のカテゴリを使用しますが、数値が many のカテゴリに含まれる規則は、アラビア語の規則と同じではありません。
other のカテゴリを除き、すべてのカテゴリはオプションです。ただし、言語固有のすべてのカテゴリに規則を指定しない場合、ローカライズされたテキストは文法的に正しくない場合があります。逆に、言語で使用されていないカテゴリに規則を指定すると、その規則は無視され、other の書式化文字列が使用されます。
NSStringFormatValueTypeKey 書式指定子を zero, one, two, few, many, および other の書式文字列で使用することはオプションです。たとえば、英語の場合、one の書式化文字列は以下のようになります。
One file remaining
一方、other の書式化文字列は以下のとおりです
%d files remaining
書式指定子を使用するか、書式文字列に数字を入力します。英語で 1 file remaining のように、書式化文字列で数値を使用すると、ユーザが地域を変更したときに (たとえば、数値セットが変更された場合)、ローカライズされない可能性があります。代わりに、以下のように書式化指定子を使用します。
%d file remaining
それ以外の場合は、以下のように数値を入力します。
One file remaining
重要:数字が含まれていない文字列には、stringsdict ファイルを使用しないでください。言語は、汎用の単数形および複数形を、one または other のカテゴリではうまく機能しない方法で定義する場合があるためです。
幅の異形
width の異形 は、ユーザインターフェイスで指定されたプレゼンテーションの幅に対してローカライズされた文字列のバージョンを提供します。標準の UIKit コントロールは、ローカライズされた stringsdict ファイルから、現在の画面サイズに適した文字列幅の異形を自動的に取得します。コードでは、NSString クラスの variantFittingPresentationWidth メソッドを使用して、幅の異形を取得することもできます。
幅の異形の辞書には、キーが NSStringVariableWidthRuleType である単一の辞書が含まれ、値は、以下のように、各異形のキー値のペアを持つ辞書です。
<key>GDP</key> <dict> <key>NSStringVariableWidthRuleType</key> <dict> <key>1</key> <string>GDP (billions)</string> <key>20</key> <string>GDP (in billions)</string> <key>50</key> <string>Gross Domestic Product (in billions)</string> </dict> </dict>
幅の異形の指定の詳細については、variantFittingPresentationWidth をご覧下さい。