如何在GWT应用程序上获取语言环境信息

时间:2020-03-05 18:40:50  来源:igfitidea点击:

在GWT中,我必须指定我的应用程序支持哪些语言环境。代码被编译成各种文件,每个语言环境一个文件(在其他版本旁边),但是我必须给我的客户一个唯一的URL。该URL应该是一个页面,应根据浏览器的首选语言环境显示该页面。
我不想为该语言环境设置HTTP参数,因为我想提供浏览器首选的语言环境。
如何在GWT中编码?

我应该尝试使用apache重写规则来做到这一点吗?我想了一下,但我认为我无法在重写规则中轻松访问此类参数。

非常感谢,
朱塞佩

解决方案

回答

除非我不正确地阅读了文档,否则我认为我们不必做任何事情。

GWT和区域设置

By making locale a client property, the standard startup process in gwt.js  chooses the appropriate localized version of an application, providing ease of use (it's easier than it might sound!), optimized performance, and minimum script size.

按照我的阅读方式,只要模块向其添加了所有语言环境选择,它应该是自动的吗?

回答

GWT为国际化提供了良好的支持。请参阅此链接。 i18nCreator命令可以设置国际化基础结构,类似于projectCreator和applicationCreator设置GWT应用程序的方式。

如果我们有需要国际化的静态字符串(即无效条目!),则不需要i18​​nCreator命令的任何其他标志来创建属性文件和基础结构。

如果我们有需要接受参数的字符串(即Hello {0}),则需要将-createMessages标志传递给i18nCreator命令以创建属性文件和基础结构。

现在,模块需要在MyApplication.gwt.xml中包含i18n模块:

<inherits name="com.google.gwt.i18n.I18N"/>

在与属性文件相同的程序包中定义一个Java接口,该属性扩展了Constants或者Messages并定义了均返回字符串的方法(名称与属性条目匹配)。

MyConstants.properties包含:

errorMessage=Invalid Entry!

MyConstants.java包含:

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

public interface myConstants extends Constants {
    String errorMessage();
}

现在从应用程序访问这些国际化的字符串:

public class MyApplication implements EntryPoint {
    private static final MyConstants constants = (MyConstants)GWT.create(MyConstants.class);

    public void onModuleLoad() {
        final Label errorMessage = new Label(constants.errorMessage);
    }
}

GWT自动为我们实现该接口。

我们可以通过类似的方式获取消息。

希望这可以入门。

回答

我遇到了与我们相同的问题,但是由于我确实需要了解当前的语言环境(我正在向第二台服务器请求要本地化的数据),我发现了此类:
com.google.gwt.i18n.client.LocaleInfo#getCurrentLocale()`。那应该给你GWT当前使用的东西。

回答

检查此com.google.gwt.i18n.client.LocaleInfo.getCurrentLocale()