7

すでにリリースしたアプリのバージョンを構築していますが、いくつかの変更があります。これはライト バージョンとフル バージョンの関係ではありませんが、同じプロジェクトを別のターゲットで使用しているほどよく似ています。

最初のバージョンで使用したほぼすべての文字列を新しいバージョンに書き換えたいのですが、これにアプローチする最善の方法を考えていました。各文字列の宣言の前に #ifdef/#else ステートメントを使用するのではなく、NSLocalizedStrings を使用することを考えていました。ただし、実際の言語は同じです。

この投稿で、自分で言語を設定できると読んだので、おそらく自分の言語を発明してそれに設定できると思います。しかし、これが最善の方法であるかどうか疑問に思っていますか?どんなアドバイスでも大歓迎です。

4

3 に答える 3

13

任意の言語に対して複数の文字列テーブル (つまり、複数の.stringsファイル) を持つことができます。ローカライズされた文字列が必要な場合は、次の方法で取得できます。

NSString *str;

// Look up string in Full.strings
str = [[NSBundle mainBundle] localizedStringForKey:@"SomeKey"
                                             value:@"DefaultValue"
                                             table:@"Full"];

// Look up strings in Lite.strings
str = [[NSBundle mainBundle] localizedStringForKey:@"SomeKey"
                                             value:@"DefaultValue"
                                             table:@"Lite"];

このメソッドのテーブルは変数にできるため、実行時に切り替えることもできます。上記は、Full.stringsテーブルとテーブルがあることを前提としていLite.stringsます。

Full.strings

"SomeKey" = "This string appears in the full version";

Lite.strings

"SomeKey" = "This string appears in the lite version";

それらを一緒に出荷したくない場合があります。その場合は、Info.plist を構成して、特定のターゲットに使用するテーブルの名前を含めることができます ( というエントリを追加すると"TableToUse"、 経由で取得できます[[[NSBundle mainBundle] infoDictionary] objectForKey:@"TableToUse"]) 。

于 2011-02-21T12:50:16.090 に答える
0

私は自分の言語を発明することを非常に躊躇しますが、おそらくその必要もありません。適切な場所で NSLocalizedString を使用し、次に genstrings を使用してこれらを Localizable.strings に抽出する場合 ( docsを参照)、このファイルの 2 つのバージョンを単純に作成し、各ターゲットに正しいバージョンをコピーできます。

于 2011-02-21T12:46:05.983 に答える