12

しばらく前に、「スクリプト化されたコンテンツでの文字列の再利用」に関する W3C の記事を読んでいました。この記事には、国際化に関する有益なアドバイスが含まれていますが、繰り返しコードを排除するという DRY (Don't Repeat Yourself) 原則と矛盾しているように感じました。 .

彼らの例を挙げると、次のようなコードがあるかもしれません...

print "The printer is ";
if (printer.working) {
    print "on.\n";
} else {
    print "off.\n";
}

print "The stapler is ";
if (stapler.working) {
    print "on.\n";
} else {
    print "off.\n";
}

私の本能は、次のように繰り返しを大まかに排除することです...

report-state(printer, "printer");
report-state(stapler, "stapler");

function report-state(name, object) {
    print "The "+name+" is ";
    if (object.working) {
        print "on\n";
    } else {
        print "off\n";
    }
}

...しかし、スペイン語にローカライズする必要がある場合、コードに問題が生じる可能性があります。これは、これら 2 つのケースでは「on」を表す単語が明らかに異なるためです。

私の質問は、他の開発者はどのように DRY 原則とコードの国際化のバランスを取ることに取り組んできたのでしょうか?

私の一部は、国際化は「<a href="http://www.extremeprogramming.org/rules/early.html" rel="noreferrer">あなたはそれを必要としない」状況の極端なプログラミングの1つであると主張したい. ただし、反対に、DRY 原則を念頭に置いたリファクタリングは、必要に応じて機能を簡単に実装できるようにすることで、このバランスを取ることになっています。

4

6 に答える 6

16

言語リソースに完全な文を保持しようとします。あなたが言ったように、異なる文脈では異なる言葉が必要になるかもしれません。しかし、より大きな問題は、文の順序が言語によって異なる可能性があることです。そのため、単語から文字列を作成すると問題が発生する可能性があります。

保管するだけ

The printer is on
The printer is off
The stapler is on
The stapler is off

すべての言語の言語リソースで。ここでの繰り返しは、すべての単一の単語がアプリケーションのどこに出現するかを把握しようとするよりも、メンテナンスの頭痛の種ではありません。

于 2008-09-11T14:02:44.453 に答える
7

メンデルトに 100% 同意します。

これはメンテナンスの問題であるだけでなく、言語の問題でもあります。すべてのラテン語では、主語の性別、数、大文字と小文字が他の要素に影響します。ルーマニア語の例

  The printer is on: Imprimanta este pornită // feminine
  The printer is off: Imprimanta este oprită
  The stapler is on: Perforatorul este pornit // masculine
  The stapler is off: Perforatorul este oprit

http://www.mihai-nita.net/article.php?artID=20060430aも参照してください。

于 2008-09-19T16:48:33.137 に答える
2

プログラム操作によってメッセージ文字列を作成しないようにしています。チームはそれらを見ることができません。

ロケ。チームは実際には別々の、しかしほぼ重複したメッセージを好みます。ただし、パラメータ化されたメッセージは受け入れます。

たとえば、「%(appliance)% は %(on_or_off)% です。」

パラメータは壊れる可能性がありますが、少なくとも loc チームには、いつ機能し、いつ機能しないかがより明確になります。

于 2008-09-13T22:14:59.823 に答える
2

メンデルト・シーベンガが、文全体またはフレーズ全体を言語リソース ファイルに保持する必要があると述べていることに同意します。文法の違いにより、言語間で単一の単語を置換することは常に妨げられます。オブジェクトのタイプとその状態を確認し、言語リソースから適切なメッセージを出力するだけでよいため、これでも最初の例よりもコードの繰り返しが少なくなります。

于 2008-09-11T14:12:39.670 に答える
1

達成しようとしている言語品質のレベルに依存すると思います。

これらの実際の言語文字列を処理するコードの繰り返しを最小限に抑えようとすると、さまざまな言語の構文と構造のロジックのまったく別のレイヤーにさらされることになります。繰り返しを最小限に抑えながら、言語の元の構造を維持するコードを作成するには、膨大な量の作業が必要になります。

特定の問題に対して、どちらがより適切なアプローチであるかを判断する必要があります。それ自体を繰り返すコード、または何でも屋になろうとして無数の言語規則に対応しようとするコード (間違いなくメンテナンスの悪夢)。

もちろん、妥協点を見つけてコードの繰り返しを最小限に抑えることはできますが、満足のいく文法の雄弁さはあきらめることができます。ウルティマ オンラインの例を見てみましょう。ローカライズされると、以前は「329 枚の金貨の山」という文字列が「金貨の山: 329 枚」のようになりました。素晴らしいとは言えませんが、ローカリゼーションに容易に役立つかなり妥当なソリューションです。

于 2008-09-11T14:18:29.237 に答える
0

ローカリゼーションをカバーするために、テキスト値をハードコーディングするのではなく、CMS を使用することをお勧めします。

于 2008-09-11T13:59:17.377 に答える