私たちはかなり大きなアプリケーションを持っており、多くの動的コンテンツを持っています。とにかく、ストラットがプロパティファイルではなく、i18nルックアップのデータベースを使用するように強制しますか?データベースを使用したStruts2国際化
誰もが動的コンテンツでi18nをやったことがあれば、私はこれを解決する他の方法も開かれています。
私たちはかなり大きなアプリケーションを持っており、多くの動的コンテンツを持っています。とにかく、ストラットがプロパティファイルではなく、i18nルックアップのデータベースを使用するように強制しますか?データベースを使用したStruts2国際化
誰もが動的コンテンツでi18nをやったことがあれば、私はこれを解決する他の方法も開かれています。
いいえ、Struts2にローカライズされたコンテンツをデータベースからロードさせる組み込みの方法はありません。あなたはそれを自分で書く必要があります。
あなたの要件は何ですか?ユーザーがフィールドプロンプトやエラーメッセージなどを動的に変更できるようにする必要がありますか?
ユーザーは本質的に調査であり、翻訳が必要なものを入力します。翻訳リソースのソースを変更して、翻訳を動的に変更できるようにしたいと考えていました。 – partkyle
カスタムインターセプタを構築することで、そうしたことを行うことができます。インターセプタにデータベースからのすべてのキー値のペアを読み込ませ、値のスタックに注入することができます。私が確信している唯一のことは、i18nのスタッフが値のスタックからその情報を引き出すかどうかということです。もしそうでなければ、情報をロードするためにインターセプターで何か他のことを行うことができるかどうかはわかりません。
カスタムインターセプタを構築することはそれほど複雑ではありません。私のブログ:http://ddubbya.blogspot.com/2011/01/creating-custom-struts2-interceptors.html(ここに自己昇進のためのブレース)を含め、多くのチュートリアルサイトがあります。
使用特性は、ラベルのように、単に静的なコンテンツのファイル、動的なコンテンツの場合など
メッセージは、使用するすべての言語の言語コード-IDを含むデータベーステーブルで始まります。すでに翻訳されているすべての動的コンテンツエントリは、それぞれの言語コードIDが主キーに追加されています。翻訳が見つからない場合は、適切な翻訳が存在するまで容易にするために、アプリケーションをデフォルト言語にフォールバックするようにプログラミングすることができます。
ユーザーが自分の好きな言語で貢献し、適切な言語IDで保存できるようにします。貢献を完了させるために、翻訳を他の言語に提供する必要があります。
...
PRIMARY KEY (`subject_id`,`language_id`),
...
あなたはおそらくそれを自分で実装する必要がありますので、私は、このための簡単なプラグアンドプレイソリューションを知らない - どれだけとグリップに来てかなりの時間を費やしての計画をストラット2(およびXWork)のローカライズ機能が実装されています。鍵は、おそらくcom.opensymphony.xwork2.TextProviderの独自の実装を提供することです(struts.xmlに<bean>タグを指定することによってstrutsに使用するよう指示します)。私はこれを全体的なアーキテクチャーに合わせる少なくとも2つの方法を考えることができます:
TextProvider実装でデータベースに直接アクセスしましたか? YAGNIの精神で、これはおそらく最善の方法です(必要に応じて、いつでも後でリファクタリングすることができます)。
また、XWorkが内部的に使用するものであるJavaのResourceBundleインターフェイスの実装にデータベースコードを配置することもできます。私にとってこれはデザイン重視のアプローチですが、プラス側にはこれを行う方法を説明しているarticlesaroundがあります。
以前は、Struts 1でこれを行う方法がありました(例:http://wiki.apache.org/struts/DatabaseMessageResourcesHowto)。残念なことに、Struts 2で同じことをする方法に関する多くの情報はないようです。 –