国際化に問題があります。私はGWTアプリケーションで2つの言語のサポートを実装しようとしています。残念ながら、UiBinderの助けを借りてそれを行う方法の完全な例は見つけられませんでした。それは私がやったことです:GWTアプリケーションでi18nを実装する方法は?
マイモジュールI18nexample.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='i18nexample'>
<inherits name="com.google.gwt.user.User" />
<inherits name='com.google.gwt.user.theme.clean.Clean' />
<inherits name="com.google.gwt.i18n.I18N" />
<inherits name="com.google.gwt.i18n.CldrLocales" />
<entry-point class='com.myexample.i18nexample.client.ExampleI18N' />
<servlet path="/start" class="com.myexample.i18nexample.server.StartServiceImpl" />
<extend-property name="locale" values="en, fr" />
<set-property-fallback name="locale" value="en" />
</module>
マイインタフェースMessage.java:
package com.myexample.i18nexample.client;
import com.google.gwt.i18n.client.Constants;
public interface Message extends Constants {
String greeting();
}
3つのプロパティファイルを持っているcom.myexample.i18nexample.client
同じパッケージ:
Message.properti ES:
greeting = hello
Message_en.properties:
greeting = hello
Message_fr.properties:
greeting = bonjour
マイUiBinderサンプルメッセージファイルGreeting.ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default" >
<ui:with type="com.myexample.i18nexample.client.Message" field="string" />
<g:HTMLPanel>
<ui:msg key="greeting" description="greeting">Default greeting</ui:msg>
</g:HTMLPanel>
</ui:UiBinder>
アプリケーションが起動すると、私はいつもブラウザで出力を得る:
Default greeting
なぜ?私は間違って何をしていますか?
私は別のURLからアプリケーションを実行しようとした:
http://127.0.0.1:8888/i18nexample.html?gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=en&gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
結果は変わりません。私は最後のケースではメッセージbonjour
を期待していましたが。
例えば、私が代わりにメッセージui:msg
のg:Buttton
使用する場合:
<g:HTMLPanel>
<g:Button text="{string.greeting}" />
</g:HTMLPanel>
をそれから私は、テキスト"hello"
とボタンの結果として取得し、私はURLを入力する場合:
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
ボタンのテキストが"bonjour"
に変わります。ここではすべてが期待通りに機能します。しかし、私の最初のケースで国際化がなぜ機能していないのですか?
そして次に差があるかどうか:
<ui:msg description="greeting">Default greeting</ui:msg>
<ui:msg description="greeting">hello</ui:msg>
<ui:msg description="greeting"></ui:msg>
は、これらのケースでは異なる結果があるべきか?どのように正しく書くか?
GWTで国際化の原則を説明し、私の例がうまくいかない理由を教えてください。 ご意見をいただければ幸いです。
もちろん、私の '.properties'ファイルは実際に正しく名前が付けられています。それは単にタイプミスです。あなたの答えをありがとう。しかし、残念ながら、私と私の問題は明確にはなりません。 UiBinderを使用せずにすべて正常に動作します。しかし、UiBinderを使ってアプリケーションを正しく国際化する方法を理解したい。 –
完成した完全なサンプルを修正したり、リンクを提供したりする必要がありますか?私は非常に感謝されます! –
https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinderI18nを参照してください。あなたが 'ui:msg'を使いたいのであれば、UiBinderインターフェイスと同じ名前の同じパッケージにプロパティファイルを提供する必要があります'ImplGenMessages'接尾辞付きです。代わりに、 'com/google/gwt/i18n/client/LocalizedResource_ .properties'と/を使用して、すべてのメッセージを一元管理できます。また、 '-gen'を使って生成されたコードを見てください。 –