アプリ内で個別のローカリゼーションを持つ複数のコンポーネントを持つことは可能ですか?
たとえば、アプリの文字列をローカライズしたいが、ローカライズされたShareKitも使用したい(したがって、私のバンドルには、異なる場所に2つのLocalizable.stringsが含まれる)。したがって、ShareKitには、Localizable.stringsファイルを含むen.lprojやde.lprojのようなフォルダーが含まれています。プロジェクトの残りの部分についても同じように作成しますが、それらは別々に保持します。
私はそれらを別々に保つことを試みただけで、その結果、私のアプリの文字列が使用されなくなりました。何か案は?
これを行う方法は非常に簡単です。
ローカライズにはいくつかのマクロがあり、そのうちの1つはNSLocalizedStringFromTable()
です。これは3つのパラメーターを取ります。
NSLocalizedString()
と同様のコメントテーブル名を使用する場合は、別の文字列ファイルを使用できます。つまり、NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever");
を実行すると、文字列をMyStrings.strings
それを使用します。
これについてはMatt Gallagherの post を参照してください。
すべてのファイル/リソースをローカライズ可能にすることができ、IB .xibファイルまたは画像jpg/pngも使用できます。プロジェクトでファイルを選択し、情報を開いて、「一般」タブ/セクションに移動し、「ファイルをローカライズ可能にする」を押すだけです。 "...その後、任意の言語を追加できます。xCodeは、最初のファイルを複製して新しいファイルを作成し、適切なフォルダーに配置します...
ルカ
あなたが求めていることを行うことはできません。複数のLocalizable.stringsファイルを作成できますが、それぞれの.lprojフォルダーには言語ごとに1つしかありません。
ShareKit Localizable.stringsファイルを編集したくないとのことですが、更新するのは面倒なので、実際にかかる作業量を確認する必要があると思います。サポートする必要のある言語の数によっては、独自のローカライズスキームを実装するよりも、独自の文字列をローカライズしてShareKit Localizable.stringsファイルの下部に追加する方が作業が少ない場合があります。
ところで、現在デバイスに設定されている言語を検出するには、次を使用できます。
NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations];
これにより、2文字の言語コード文字列の配列が得られます。インデックス0のアイテムは、現在選択されている言語です。これは、言語に基づいてロジックを決定する必要がある場合に役立ちます。
わかりました、ShareKitはわかりませんが、テキストファイルを編集して、そのファイルに新しい単語を追加することはできないのではないでしょうか。
次に、独自の「辞書」ファイルを作成してローカライズを試み、それを読み取ってNSDictionaryに配置し、単一の単語/値を読み取ることができます。ファイル「myDict」にレコードを挿入できます。イタリア語の場合は値「ciao」、英語の場合は「hallo」の文字列型のキー「greeting」を持つplist
NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"myDict" ofType:@"plist"];
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:bundle];
NSString *greetingsTranslatedInTheGoodLanguage = [savedStock objectForKey:@"greeting"];
// just to try what you have read:
NSLog (@"translated by your own dictionary: %@", greetingsTranslatedInTheGoodLanguage);
[savedStock release];
ルカ
pSもコメントを読んで...