通常、文字列リソースがコード内ではなくコードの外部に保持されるのはなぜですか?


18

一般に、多くのプラットフォームでは、文字列リソースを.resxまたは.xmlファイルに書き込み、プラットフォームに依存するアプローチを使用してそれらを取得しています。

つまり、iOSでは、を介してNSBundle.MainBundleContext.ResourcesAndroidで使用して取得しています。

このアプローチの利点は何ですか?また、コードで直接アクセスできない理由は次のとおりです:

  1. クロスプラットフォームプロジェクトでは、どのプラットフォームでも統合せずに直接アクセスできます。

  2. 構築中、リソースが適切に構築されたかどうかについての懸念はありません。

  3. コーダーは、多言語処理などの機能を使用できます

要するに、文字列リソースがそのように構成されている理由は何ですか?

[編集]

私のファイルが他のプロジェクト間で共有される「コア」プロジェクトの一部であるとしましょう。(PCL、クロスプラットフォームプロジェクトのファイル構造について考えてください。)

そして、私のファイルは.resx / .xmlファイルとまったく同じで、次のようになっていると仮定します(私はxmlのプロではありません、ごめんなさい!):パラメーターParamètres

したがって、これは基本的にカスタムxmlであり、適切な文字列を取得するためにキー/言語をポイントします。

ファイルは、アプリケーション内にアクセス可能なファイルを追加するのと同じようにアプリケーションの一部になり、PCLを使用してコーディングされた文字列リソースにアクセスするシステムになります。これにより、アプリケーションにオーバーヘッドが追加されますか?



6
いいえ、私の懸念は国際化に関するものではなく、アーキテクチャとクロスプラットフォームに関するものです。申し訳ありません。
レオンPelletier 14年

1
この質問は、あらゆる種類のリソースに一般化できますが、実際には、ローカリゼーション/国際化は別としても簡単です。あらゆる種類のリソースをコードから分離しておくことの利点は何ですか?通常、画像または音声ファイルがバイナリ文字列としてソースでエンコードされないのはなぜですか?(もちろん、データURIは存在しますが、一般に大きなファイルには実用的ではありません)。他の人はすでにかなり良い答えを提供しましたが、私はユーザーが読み取り可能な文字列だけが外部化から利益を得る唯一のリソースタイプではないことを指摘したかったです。
JAB 14年

回答:


38

ローカリゼーションと国際化、

文字列を外部に保持することで、再コンパイル(せいぜい再リンクだけで、せいぜい新しいフォルダにドロップする)しなくても、文字列を変更(読み取り:翻訳)できます。


この再リンクと再コンパイルは正当な理由です、ありがとう。
レオンPelletier 14年

2
それでも質問を理解した唯一の人。
レオンPelletier

3
@ratchetfreak早すぎて受け入れるのは悪い形です(間違いなく数時間以内に数えられます)。他の回答がバブルになる時間を与えません。これは簡単で、要点で正確です...しかし、誰かが明日(またはそのことについては来月)により良い、より完全な、より詳細な答えをもたらすかもしれません。
WernerCD 14年

3
エクストラ:...それは編集に翻訳者のためのXMLファイルOKかもしれないが、これまで彼らが近くに実際のコードをいじることはできません
Darkhogg

質問は次のとおりです。「この回答は通訳言語にも適用されますか?」再リンクや再コンパイルは行われないため、お願いします。
トーマスエディング

10

文字列リソースのみを含むファイルがある場合は、リソースファイルを翻訳会社などに提供して翻訳を取得できます。素人にたくさんのコードファイルを渡して翻訳をしなければならない場合(おそらく誰にでもコードを渡したくないかもしれない)、どれだけ難しいか想像できると思います。


2
さて、プロジェクトに含まれるファイルとリソースファイルに違いはありません。問題はありません。
レオンPelletier

リソースをコードに直接含めてから、プログラム内のすべてを処理することについて話しているので、PCL /クロスプラットフォームに適しています。
レオンPelletier

2
すべての文字列リソース(辞書の定義またはそのようなもの)を含む「コード」ファイルがあり、その中に他に何もない場合..それは基本的にリソースファイルです(ただし、たとえば、androidは任意のObjective-Cコードを取得します)。他のコードが含まれている場合、または複数のファイルに分割されている場合は、外部翻訳を取得するのが難しくなります。クロスプラットフォームのビューで、XMLのようなテキスト形式は、あなたが読んで、任意の言語/プラットフォーム上で使用する(しかし、あなたはいくつかの仕事にそれを置くことが必要になる場合があります)可能性という利点を持っている
Floの

7

国際化/ローカリゼーションに加えて、このようにテキスト文字列を分離することにより、校正者はmessages.${LOCALE}、真のソースコードファイルに触れることなく、に分離されたスペル/文法/句読点の修正を送信できます。コードの変更でブラックアウトが発生する可能性がありますが、そのようなテキストの修正は受け入れます。コードとメッセージの両方の同時変更を受け入れる場合、校正者がチェックアウトしたときに存在したメッセージをコード変更が再定義しない限り、それらを分離しておくとパッチをマージしやすくなりますmessages.en_US

また、実装方法によっては、アプリケーションを再リンクする必要がない場合もあります。コードはmessages.${LOCALE}、特定のメッセージから行138を取得するだけで、実行時に行番号が決定されます。


0

これは、言語/プラットフォームが文字列のローカライズを実装することを決定した方法です。ローカライズのすべてのアプローチでは、翻訳を取得するために何らかの外部リソースファイルが必要です。主な問題点は、これらのリソースをどのように維持するかです。

これらのリソースファイルを手動で保守する必要があるように見えますが、これはかなりの負担になる可能性があります。また、繰り返し文字列の共有が複雑になります。また、現在1つの言語のみを出荷しているときにこれを行う必要があるため、さらに負担が大きくなります。

一般的な代替手段は、ソースコード内の翻訳可能な文字列をマークアップし、これらの文字列をクロスプラットフォームおよびクロス言語でうまく機能する標準POファイルに自動的に抽出するGNU Gettextアプローチです。開発者の観点から見ると、XMLリソースファイルの手動メンテナンスに勝るものはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.