gpt4 book ai didi

gwt - 如何在 GWT 应用程序中实现 i18n?

转载 作者:行者123 更新时间:2023-12-04 12:11:33 26 4
gpt4 key购买 nike

我有国际化的问题。我正在尝试在我的 GWT 应用程序中实现对两种语言的支持。不幸的是,我从来没有找到一个完整的例子,如何在 UiBinder 的帮助下做到这一点。这就是我所做的:

我的模块 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>

我的界面 消息.java :
package com.myexample.i18nexample.client;

import com.google.gwt.i18n.client.Constants;

public interface Message extends Constants {

String greeting();
}

同包 com.myexample.i18nexample.client具有三个属性文件:

Message.properties :
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 .

例如,如果我使用 g:Buttton而不是消息 ui:msg :
<g:HTMLPanel>   
<g:Button text="{string.greeting}" />
</g:HTMLPanel>

然后我得到带有文本 "hello" 的按钮的结果

如果我输入网址:
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 中的国际化原则以及为什么我的示例不起作用。
任何建议将不胜感激。

最佳答案

首先,文件应命名为 Message_fr.properties (分别为 Message_en.properties ),而不是 Message.properties_fr (分别Message.properties_en)。

然后ui:msg等。在 UiBinder 中将 生成 一个接口(interface)(扩展 com.google.gwt.i18n.client.Messages )),不要使用您定义的接口(interface)。为此,您必须使用 {string.greeting} (其中 stringui:field 你给你的 ui:with )。 UiBinder 生成器将执行 GWT.create()type你的类(class)ui:with ,这就是您在 Java 代码中所做的:

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

在隐式消息接口(interface)(由 UiBinder 生成)中,各种 ui:generateXxx ui:UiBinder 上的属性将转换为接口(interface)上的注释( @Generate 注释的属性,或 @GenerateKeys 注释的值)。
然后,将为每个 ui:msg 生成一个方法,其中属性生成等效注释( @Key@Description )和 ui:msg 的内容元素是 @DefaultMessage 的值注解。当您在内容中拥有或小部件时,它们将被转换为方法的参数和 @DefaultMessage 中的占位符。文本(这些值将由 UiBinder 填充)。

我建议你先在没有 UiBinder 的情况下制作一些东西,然后了解它是如何工作的;然后尝试 ui:msg在 UiBinder 中,使用 -gen在 DevMode 或编译器中,这样您就可以准确地看到 UiBinder 生成的代码(是的,它实际上只生成您可以自己手动编写的代码)。

此外,您应该添加 <set-property name="locale" value="en, fr" />或者你仍然有 default周围的语言环境,尽管 set-property-fallback (它永远不会被使用))。

关于gwt - 如何在 GWT 应用程序中实现 i18n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10544901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com