文字列の外部化が最大の問題になるとは思えません。しかし、私はあなたにいくつかのアドバイスをさせてください.
文字列の外部化
もちろん、翻訳可能な文字列をコードから分離する必要があります。キーと値のペアを含むプレーン テキストの 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 エンコーディングのサポートも必要になるでしょう。これは非常に難しいでしょう...