0

ユーザーがアプリケーションを開いたときに、ユーザーを温かく歓迎したいと思います。だから私はそれらをランダムに表示するために異なる文を持ちたい. メッセージの数は言語ごとに異なります。

この問題を解決するための好ましい方法は何ですか?

私のアイデア:

  1. 文字列ファイルにもカウントを保存します->これは維持する必要があるため、この考えは好きではありません "welcomeCount" = "5"; "welcomeN" = "Hi....";

  2. メッセージの分離 -> この考えは嫌いです。 "welcomeMessages" = "Hey there...|MessageN";

この問題をエレガントな方法で解決するアイデアを持っている人はいますか?

4

2 に答える 2

1

ウェルカム メッセージは、ローカライズされたプロパティ リストに保存できます。

  • Xcode で、[ファイル] -> [新規] -> [ファイル...] に移動します。
  • Resource -> Property List テンプレートを選択し、ファイル名として「Welcome.plist」などを選択します。
  • Xcode で Welcome.plist を選択し、ルート オブジェクトの型をDictionaryからArrayに変更します。
  • Welcome.plist を選択してファイル インスペクタに移動し、[Make Localized ...] をクリックします。次に、Welcome.plist に必要なローカリゼーション (英語やドイツ語など) を選択します。
  • これで、個別に編集できる各言語の Welcome.plist が作成されました。
  • 文字列を追加するには、プロパティ リストの「+」記号をクリックします。

プログラムでは、リストを簡単にロードできます

NSString *path = [[NSBundle mainBundle] pathForResource:@"Welcome" ofType:@"plist"];
NSArray *messages = [NSArray arrayWithContentsOfFile:path];

これにより、ユーザーの言語に応じて、「適切な」リストが配列にロードされますmessages。でランダムなメッセージを選択できます

int idx = arc4random_uniform([messages count]);
NSString *msg = [messages objectAtIndex:idx];
于 2012-10-04T19:18:19.463 に答える
0

メンテナンスを最小限に抑えるために、バイナリ検索を使用して、利用可能なバリエーションの数を見つけることができます。に次のものがあるとしますLocalizable.strings

"Welcome_0" = "Hello";
"Welcome_1" = "Hi";
"Welcome_2" = "What up";
"Welcome_3" = "Howdy";

次を使用してカウントを見つけることができます。

int lower = 0, upper = 10;
while (lower < upper - 1) {
    int mid = (lower + upper) / 2;
    NSString *key = [NSString stringWithFormat:@"Welcome_%i", mid];
    BOOL isAvailable = ![key isEqualToString:NSLocalizedString(key, @"")];
    if (isAvailable) lower = mid;
    else upper = mid;
}

最後に、次を使用してランダムなメッセージを選択します。

NSString *key = [NSString stringWithFormat:@"Welcome_%i", rand() % upper];
NSString *welcome = NSLocalizedString(key, @"");
于 2012-10-04T19:03:51.347 に答える