質問

私の友人は現在、J2EE と Struts を使用して Web アプリケーションを構築しており、複数の言語でページを表示できるように準備する予定です。

多言語サイトをサポートする最善の方法は、次のようなページのすべての文字列を保存するプロパティ ファイルを使用することだと言われました。

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

この解決策は問題ありませんが、サイトにニュースなど (ブログ) が表示されたらどうなるでしょうか?つまり、静的ではなく、頻繁に更新されるコンテンツです...サイトを管理する人は、サポートされている各言語ですべての新しいエントリを作成し、エントリの各バージョンをデータベースに保存する必要があります。アプリケーションは、ユーザーが選択した言語のエントリのみを読み込みます。

この種の実装をサポートするにはデータベースをどのように設計しますか?

ありがとう。

役に立ちましたか?

解決

私が以前にデータベースを設計した方法では、NewsID (int)、NewsPubDate (datetime)、NewsAuthor (varchar/int) などの基本情報を含む News テーブルを用意し、次に次の列を含むリンク テーブル NewsText を用意します。NewsID(int)、NewsText(テキスト)、NewsLanguageID(int)。そして最後に、LanguageID(int) と LanguageName(varchar) を含む Language-table が完成しました。

次に、ユーザーにニュース ページを表示したい場合は、次のようにします。

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

そのセッション ビットは、ユーザーがログインするとき、またはサイトに初めてアクセスするときに、ユーザーの言語を保存するローカル変数です。

他のヒント

警告:私は Java ハッカーではないので、YMMV ですが...

「プロパティ」のリストを使用する場合の問題は、多くの規律が必要なことです。ユーザーに出力する文字列を追加するたびに、プロパティ ファイルを開いて、その文字列 (またはそれにほぼ同等のもの) がすでにファイル内に存在するかどうかを確認してから、新しいプロパティを追加する必要があります。そうでない場合。これに加えて、外部の翻訳チームに処理してもらう場合は、プロパティ ファイルが人間による可読/編集可能であることを期待する必要があります。

データベース ベースのアプローチは、データベース ベースのすべてのコンテンツに役立ちます。理想的には、コンテンツの部分とその翻訳を簡単に結び付けることができます。実際に当てはまるのは、何かを出力したいすべての場所だけです。 そうではありません データベースから外れています (エラー メッセージなど)。

私たちが発見したかなり古いテクノロジーの 1 つは、今でも非常にうまく機能しており、gettext を使用することです。Gettext またはそのバリアントは、ほとんどの言語とプラットフォームで利用できるようです。基本的な前提は、次のように出力を特別な関数呼び出しでラップすることです。

echo _("Please do not press this button again");

次に、ソース コードに対して gettext ツールを実行すると、そのようにラップされたすべてのインスタンスが「po」ファイルに抽出されます。これには次のようなエントリが含まれます。

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

そして、適切な場所に翻訳を追加できます。

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

それ以降の gettext ツールの実行では、po ファイルが更新されるだけです。ソースから po ファイルを抽出する必要さえありません。あなたを知っているなら 5月 サイトを最終的に翻訳したい場合は、すべての出力で上記の形式 (下線付きの関数) を使用するだけです。po ファイルを指定しない場合は、引用符内に入力した内容がそのまま返されます。gettext はロケールと連動するように設計されているため、適切な po ファイルを取得するためにユーザーのロケールが使用されます。これにより、新しい翻訳を非常に簡単に追加できるようになります。

ゲットテキストの長所

  • コーディング中に邪魔にならない
  • 翻訳を追加するのは非常に簡単です
  • PO ファイルは高速にコンパイルできる
  • ほとんどの言語/プラットフォームで利用できるライブラリがあります
  • 翻訳を扱うための優れたクロスプラットフォーム ツールがあります。実際には、次のようなツールを使用して翻訳チームをセットアップすることが可能です。 ポ編集 翻訳プロジェクトの管理が非常に簡単になります

取得テキストの短所

  • サイトの「家具」のニーズは解決しますが、通常はデータベース駆動型コンテンツに対してデータベース ベースのアプローチが必要になります。

gettext の詳細については、「gettext」を参照してください。 このウィキペディアのページ

Java Web アプリケーションは、Java 標準タグ ライブラリを使用した国際化をサポートします。

実は問題が 2 つあります。静的コンテンツと動的コンテンツ。

使用できる静的コンテンツの場合 jstl. 。Javaを使用しています リソースバンドルこれを達成するためです。なんとか入手できました データベース化されたバンドル このサイトの助けを借りて作業します。

2 番目の問題は、動的コンテンツです。この問題を解決するには、ユーザーのロケールに基づいてさまざまな翻訳を取得できるようにデータを保存する必要があります。(ロケールには国と言語が含まれます)。

それは簡単なことではありませんが、事前に少し計画を立てることで実現できることです。

@オーロン

それが私たちがそれを適用するものです。私たちのアプリはすべて PHP ですが、gettext には長い伝統があります。

があるようです 優れた Java 実装

JSP を使用している場合はタグ ライブラリは問題ありませんが、次のようなテンプレート ベースのテクノロジを使用して I18N を実現することもできます。 フリーマーカー.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top