2

多くのハードコーディングされたテキストを含む中規模の Web サイトの多言語機能のコーディングを開始しました。Web サイトは日本語と韓国語 (マルチバイト文字セット) に翻訳されることになっているため、次のことを検討しています。

  • 文字列の外部化を使用する場合、日本語または韓国語の文字列は、ロケール ファイル内で Unicode 形式にする必要がありますか (つまり台北、文字列値としての台北ではなく)?
  • ローカリゼーションを DB (つまり MySQL) に保存し、PHP のローカリゼーション関数を介してそれぞれの値を取得する方が理にかなっていますか?

ご意見をお待ちしております。

よろしくお願いします

4

3 に答える 3

2

i18nの経験がある人から0.02ドル...

  1. これらのリソースを管理するのはコーダーではなく翻訳者である可能性が高いため、翻訳は人間が読める形式で保管してください。
  2. このテキスト(ハードコーディングされている、と言う)が頻繁に変更されない場合は、これらのリソースを実行時に読み込むファイルとして保存することをお勧めします。
  3. このテキストが頻繁に変更される可能性がある場合は、データベースやメモリ内のKey-Valueストアなど、リソースを格納するための他の代替手段を検討することをお勧めします。

要件によっては、上記の組み合わせを検討することをお勧めします。

ただし、コード(HTML文字エンティティ)を翻訳リソースと混在させないようにすることを強くお勧めします。ほとんどの翻訳者は、それらが何を意味するのか理解できず、翻訳中にそれらを壊す可能性があります。逆に、プログラマーは、実際にその言語を理解していない限り、コードやフォーマットを翻訳リソースに正しく挿入する方法を理解していない可能性があります。

tl;dr 
  - use UTF-8
  - don't mix any code/formatting into the translations themselves
  - how you store the translations depends upon your requirements
于 2011-05-13T02:02:31.717 に答える
1
  • すべてのテキストをHTMLエンティティとして保存する必要はありません。それはあなたを怒らせるでしょう。これを行う唯一の理由は、ASCIIエンコーディングでドキュメントを提供する必要があり、文字を直接埋め込むことができない場合です。しかし、この時代にはその理由はありません。ドキュメントをUTF-8として提供し、コンテンツをUTF-8に書き込んで保存し、それで完了します。
  • 翻訳をデータベースに保存するかどうかは、パフォーマンス、キャッシュ、テキストを検索できる必要があるかどうか、プログラマー以外の人がテキストを編集できるかどうかなど、多くの要因によって異なります。通常、.mo/.po翻訳gettext別の方法で証明されない限り、ファイルを使用することをお勧めします。
于 2011-05-13T01:40:07.763 に答える
1

文字列の外部化が最大の問題になるとは思えません。しかし、私はあなたにいくつかのアドバイスをさせてください.

文字列の外部化

もちろん、翻訳可能な文字列をコードから分離する必要があります。キーと値のペアを含むプレーン テキストの UTF-8 エンコード ファイルに翻訳を保存することをお勧めします。

some.key=some translation

もちろん、実行時にこれを解決するには、ヘルパー スクリプトを作成する必要があります。スクリプトは、エンド ユーザーの言語を検出する必要があります。

言語検出

Web ブラウザーは、要求を送信するたびに AcceptLanguage ヘッダーを送信するのがとても便利です。あなたがする必要があるのは、このヘッダーの内容を読んで、ユーザーがリストした言語のいずれかをサポートしているかどうかを確認することです. その場合は、リソース ファイル (上記で定義) を読み取り、指定された言語の文字列を返します。それ以外の場合は、既定の言語を返します。以下のコード例は、最も望ましい言語を提供します (サポートしている言語である必要はありません)。

<?php
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale;
?>

これはまだ、最大の課題ではありません。

スタイルとスタイルシート

多言語 Web サイトまたは Web アプリケーションの本当の問題はスタイルです。人々はスタイル定義をインラインで配置する傾向がありますが、これは控えめに言っても問題です。また、デザイナーは、Arial がユニバース全体に最適なフォントであると考える傾向があり、強調には常に太字のフォントを使用する必要があります。唯一の問題は、状況によってはフォントが読めなくなる可能性があることです。
認めざるを得ませんが、なぜそうなるのかはわかりませんが、ほとんどの場合、Web ブラウザーはアジア文字の太字属性を無視する傾向があります (これは良いことです) 。あなたのフォント定義は sayfont-family:Arial; font-size:10px;です。

他の問題は色かもしれません。Web サイトのデザインによっては、使用する色がターゲット ユーザーにとって不適切な場合があります。これは、私たち全員が文化的背景に基づいて色に意味を割り当てる傾向があるためです。

ローカライズ可能なテキストを含む画像も頭痛の種になる可能性があります。そのようなテキストを外部化する (そして他の HTML 要素と同じように書き留める) か、多言語リソース構造を準備する (つまり、すべての画像を言語コードにちなんで名付けられたディレクトリに配置する ("えん」、「じゃ」、「こ」))。

ただし、実際の課題は、、、、、などのハードコードされた書式タグです。<b>最近では誰も使用しないでください。代わりにスタイル クラスを使用する必要がありますが、一般的な方法は異なります。おそらく、それらをスタイル クラスに置き換える必要があります。各要素は複数のスタイル クラスを持つことができますが、驚いたことに、これは一般的な知識ではありません (たとえば)。<i><u><strong><p class="main boldText">

スタイルを外部化したら、何らかのCSS Localization Mechanismを実装する必要があるでしょう。これは、私が上で書いたことに照らして必要です。これを行う最も簡単な方法は、前に述べたものと同様のディレクトリ構造を作成することです。英語ベースの CSS ファイルの場合は「en」、日本語の場合は「ja」、韓国語の場合は「ko」です。これにより、言語ごとに個別のセットが作成されます。 CSSファイルの。これは UI スキンに似ていますが、ユーザーがスキンを選択できない場合に限り、表示する CSS を決定します。とにかく言語を検出します。

インライン スタイル定義 ( ) については、CSS L10n メカニズムを定義した後、キーワード<p style="whatever">で強制することにより任意のスタイルをオーバーライドできます。!importantつまり、非常に間違った考えの誰かがこのキーワードをインライン スタイル定義に入れていない限りです。

連結

さて、これはあなたの最大の課題です。文字列の外部化の必要性を理解している人でさえ、次のように文字列を連結する傾向があります。

$result = $label + ": " + $product;
$message = "$your_basket_is + $basket_status + ".";

これは、国際化に深刻な問題をもたらします (ローカリゼーションでも解決されない場合)。これは、テキストを別の言語に翻訳した後、文の順序が異なる傾向があるためです (これは特に韓国語に関するものです)。また、ハードコーディングされた句読点も示しましたが、これはアジア言語では必ずしも正しいとは限りません。それが私が毎日経験しなければならないことです:/

おそらく行う必要があるのは、そのような連結を削除するか、メッセージのフォーマットの何らかの手段を使用することです。PHP の例 (参照している Web ページから直接取得) は次のようになります。

<?php
$fmt = new MessageFormatter("en_US", "{0,number,integer} monkeys on {1,number,integer} trees make {2,number} monkeys per tree");
echo $fmt->format(array(4560, 123, 4560/123));
$fmt = new MessageFormatter("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen sind {2,number} Affen pro Baum");
echo $fmt->format(array(4560, 123, 4560/123));
?>

この例でわかるように、数値も多くのロケール スタイルにフォーマットされています。これにより、次のことがわかります。

ロケール対応フォーマット

日付、時刻、数値、通貨、またはその他の同様の情報は、ユーザーが検出したロケールに従ってフォーマットする必要があります。ここにはわずかな違いがあります。関連する言語リソースをサポートしていない (翻訳がない) 場合でも、これを行うようにしてください。もちろん、通貨記号には、ユーザーのデフォルトではなく実際の通貨を使用しますが、形式はエンド ユーザーの文化的背景を尊重する必要があります。

概要

日本語と韓国語のターゲット市場に焦点を当てた多言語 Web サイトのデザインについて簡単に紹介しました。ある時点で簡体字中国語もサポートする必要がある場合は、GB18030 エンコーディングのサポートも必要になるでしょう。これは非常に難しいでしょう...

于 2011-05-14T09:05:33.600 に答える