6

私は多くの開発者がこのようにそれをしていることを知っています:彼らは英語で彼らのアプリを開発し始め、そしてNSLoclaizedString(@"Tap this to do that!", @"Telling what to do...")単にの代わりに置き@"Tap this to do that!"ます。

次に、genstringsこれらすべての文字列を抽出することにより、何らかの方法でLocalizable.stringsファイルを作成する実行を行います。厄介な部分:コードで使用される長いテキストが鍵になります。できます。ある日、コードにすばやくアクセスして英語の文字列を変更し、ローカリゼーションを忘れて、それがすべてのLocalizable.stringsファイルのキーとして機能するまで。

そのため、文字列と混同しない「実際の」キーを使用する傾向があります。簡単なテストのために、英語とフランス語にローカライズされたプロジェクトを作成しました。次に、シミュレータ言語をドイツ語に設定しました。なぜなら、ユーザーがのようなキーを見るとしたら、それはひどくひどいことになるからですTTTDT

そこで、英語とドイツ語だけを用意して、デモアプリを起動しました。そして、私が得たのは、EnglishLocalizable.stringsファイルからの英語のテキストでした。

結論: OS言語がアプリでカバーされていない場合、NSLocalizedStringは英語ファイルにフォールバックするようです。

質問:常にLocalizable.strings (English)ファイルがあり、キーが適切にフォーマットされた値とともにファイル内にあると仮定します。NSLocalizedStringが失敗し、キーを直接表示する状況はありますか?

4

4 に答える 4

4

あなたの質問に答えるために:はい、私はあなたが心配している問題を経験しました。つまり、localizable.stringsファイルが存在し、それらのキー名のエントリが含まれていても、キー名が表示されました。これは、プロジェクトに複数のlocalizable.stringsファイルがある場合に発生します。これは、独自のファイルlocalizable.strings(ShareKitなど)を持つオープンソースプロジェクトから一連のファイルをプロジェクトにドロップすると簡単に発生する可能性があります。

これは、この問題について説明している関連する質問です。

ただし、少なくともIDスタイルのキー名を使用している場合は、任意の言語でアプリをテストすると、このような問題に気付くでしょう。英語(または基本言語)の文字列をキーとして使用した場合、ローカライズされたバージョンをテストするまで、この厄介な問題は発生せず、見過ごされやすくなります。

したがって、テキストを言い換えるときにキーを(すべての言語で)更新することを忘れないようにする必要があることに加えて、英語のテキストをキーとして使用するとバグが隠れてしまう可能性があるという問題があります(英語は問題ないように見えますが、ローカライズされたバージョンはそうではありません) )。したがって、実際のテキストではなく「実際の」キー名を使用する方が実用的であるように思われます。それでも何らかの理由でキー名が表示されるのではないかと心配な場合は、少なくとも理解できるほど説明的なキーを選択してください。

于 2011-11-26T20:06:49.907 に答える
1

私たちは「実際の」キーを使用する傾向がありますが、通常は英語のテキスト(または省略形)であり、最後に「キー」を追加します。そうすればそれは明らかです。

于 2011-11-26T20:02:39.870 に答える
0

アプリのすべてのキーがすべてのlocalizable.stringファイルに表示されることを実際に確認するカスタムコードを作成しました。このプロセスには2つのステップがありgenstringsました。ソースで現在参照されているすべてのキーを含む新しいローカライズ可能な文字列ファイルを生成するために使用します。次に、いくつかのObjective-C apiを使用して既存のlocalizable.stringsファイルをロードし、それらすべてが新しく生成されたものとまったく同じキーのセット(これ以上でもそれ以下でもない)を持っていることを比較しました。

于 2011-11-27T03:08:42.023 に答える
0

より良いアプローチ(特に私たちプログラマーにとって)は次のようになると思います。

1)技術的な文字列をコードに入れる

2)専用の便利な機能を備えた翻訳

この上:

a)詳細

b)「Localizable.strings」のローカライズされた文字列のみを変更します

c)コード上の文字列を検索して置き換えたり、翻訳を取得したりすることなく、プレーンな「Localizable.strings」を外部に送信できます。

d)言語を追加するには、2回クリックして、テキストを貼り付けます。

e)エラーをより一般的/最終ユーザーにとってより穏やかにすることができます:

サンプル:

"NETWORK_ERROR"="ネットワークエラー";

"NETWORK_ERROR_NO_DATA"="データがありません。plsチェック設定";

"NETWORK_ERROR_NO_JSON"="データがありません。設定を確認してください";

Googleのように、最終ユーザーは404またはJSON解析エラーを理解できません。

「おっと...ネットワークエラーが発生しました」。(コーダーはコードの本当の原因を確認します)

そして最後に...ローカライズするために早期に開始します。

利便性f.:

func localized(_ msg: String)->String{
    let s = NSLocalizedString(msg, comment : "")
    return s
}
于 2019-03-17T09:00:26.527 に答える