gwt
  • internationalization
  • gwt2
  • uibinder
  • 2012-05-11 13 views 6 likes 
    6

    国際化に問題があります。私は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:msgg: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で国際化の原則を説明し、私の例がうまくいかない理由を教えてください。 ご意見をいただければ幸いです。

    答えて

    6

    最初に、(Message_en.properties)のファイル名はMessage.properties_fr(resp。Message.properties_en)ではありません。

    次に、ui:msgなど。 は、com.google.gwt.i18n.client.Messagesを拡張する)インタフェースを生成し、定義したものを使用しません。そのためには、に与えたui:field{string.greeting}string)である必要があります。 (UiBinderサンプルメッセージによって生成された)暗黙のメッセージインタフェース、様々なui:generateXxx属性で

    Message string = GWT.create(Message.class); 
    String localizedGreeting = string.greeting(); 
    

    を:UiBinderサンプルメッセージ・ジェネレータは、Javaコードで行われているだろう何であるあなたのui:withtypeクラス、上GWT.create()を行いますui:UiBinder上の注釈は、インタフェース上の注釈(@Generate注釈のプロパティ、または@GenerateKeys注釈の値)に変換されます。
    次に、ui:msgごとに1つの方法が生成されます。属性は同等の注釈(@Key,@Description)を生成し、ui:msg要素の内容は@DefaultMessage注釈の値です。コンテンツ内にウィジェットがある場合、メソッドとプレースホルダーの引数に、@DefaultMessageテキスト(値はUiBinderで埋められる)に変換されます。

    私はUiBinderなしで何かを作って、を理解することをお勧めします。; DevModeまたはコンパイラで-genを使用してUiBinderでui:msgを試してください。そうすれば、UiBinderが生成するコードを正確に見ることができます(実際に手で書いたコードを生成するだけです)。

    また、<set-property name="locale" value="en, fr" />を追加するか、set-property-fallback(これは決して使用されないでしょう)にもかかわらず、defaultのロケールを使用してください。

    +0

    もちろん、私の '.properties'ファイルは実際に正しく名前が付けられています。それは単にタイプミスです。あなたの答えをありがとう。しかし、残念ながら、私と私の問題は明確にはなりません。 UiBinderを使用せずにすべて正常に動作します。しかし、UiBinderを使ってアプリケーションを正しく国際化する方法を理解したい。 –

    +0

    完成した完全なサンプルを修正したり、リンクを提供したりする必要がありますか?私は非常に感謝されます! –

    +1

    https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinderI18nを参照してください。あなたが 'ui:msg'を使いたいのであれば、UiBinderインターフェイスと同じ名前の同じパッケージにプロパティファイルを提供する必要があります'ImplGenMessages'接尾辞付きです。代わりに、 'com/google/gwt/i18n/client/LocalizedResource_ .properties'と/を使用して、すべてのメッセージを一元管理できます。また、 '-gen'を使って生成されたコードを見てください。 –

    関連する問題