SmartGWT を使用してプロジェクトを開発していて、それを国際化したいと考えていますが、EntryPoint (onModuleLoad) でブラウザーの言語を知るにはどうすればよいですか? サーバー側でSpringを使用しており、onModuleLoadで、プロパティファイルからデータを収集しているサービスにRPC呼び出しを送信し、国際化のためのすべてのキー値を含むMapで応答するため、IUウィジェットの作成中に私はこのLables.get( "myLabel")のように私のマップを使用しています。everytings が正常に動作するようになったので、ブラウザーの言語を検出し、それを使用して適切なプロパティを照会したいと考えています。私の英語がとても悪い場合は申し訳ありません
3 に答える
それから私は汚い解決策で終わりました.Lt_Shadeが私に言ったようにjavascript関数を作成しました。 EntryPoint は HTML ページの前に実行されるため、Javascript 関数の前に navigator.language が見つからないため、EntryPoint 内で JavaScript オブジェクトを呼び出す JSNI 関数を作成しました (Java:gwt コードから Javascript 関数を呼び出す)。私は呼び出しを強調して主張し、navigator.language がロードされていることを確認し、それを取得できるようにします。
私のHTMLページで
....
<script language="javascript">
function loadLocaleLanguage(){
document.getElementById("localeLanguage").setAttribute("value",(navigator.language).substring(0,2); // I don't need Country code
}
</script>
...
<input type="hidden" id="localeLanguage" value="" />
....
私のエントリポイントで
public static native void getLocaleLanguage() /*-{
$wnd.loadLocaleLanguage();
}-*/;
public void onModuleLoad(){
// I call my javascript function to ensure that the input have my localeLanguage
getLocaleLanguage();
// now I'm retreiving it using DOM thanks to Document object
String localeLanguage = Document.get().getElementById("localeLanguage").getAttribute("value");
....
}
それは最善の解決策ではないと確信していますが、誰かが EntryPoint 内の httpRequest にアクセスする方法 (accept-language を含んでいます) を見つける方法、または EntryPoint の navigator.language に直接アクセスする方法を誰かが見つけるのを手伝ってくれれば、少なくとも機能します。良くなるでしょう。みんなありがとう
これが役立つかどうかはわかりませんが、Java サーブレットで言語を取得するための Java コードを含むこのような質問があります。
Java サーブレットでユーザーの国と言語を自動的に選択する
次のような JavaScript 関数を EntryPoint に追加することもできます。
var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;
alert ("The language is: " + userLang);