2010-10-12 58 views
1

我的问题是以下内容:GWT gwt i18n杜松子酒模块

我得到一个应用程序与GWT运行。 在应用程序启动时,加载一个扩展AbstractGinModule或另一个GWTClientModule的GWTClientModule。

基于那个开关我想设置本地。 有没有办法做如下设置本地不直接以html:

<meta name="gwt:property" content="locale=fr"> 

而是直接在选择GWTClientModule之一?

非常感谢你的善意帮助;-)

+0

显然只有两种方法来指定区域设置:1 /在主机页面我们定义。 2 /在网址中加入“?locale = fr”。真的吗?服务器端或使用web.xml或gwtclientmodule或其他方式都不可能... – AbstractMan 2010-10-12 15:23:10

回答

1

你不能这样做,如果你使用static String internationalization,因为它使用deferred binding:GWT编译器生成每个区域的一个JavaScript文件,而当你的页面加载,在加载适当版本的代码之前,GWT引导脚本在页面(或URL中)内查找“locale”属性。

选择编程语言环境(您GWTClientModule内)是不可能的,因为你的代码的本地化版本已经一次加载代码执行...

如果你真的需要在运行时选择的语言环境,你可能想看看dynamic String internationalization,但它性能较差,你失去了静态类型检查。

+0

感谢您的回复。我将首先看到动态的String国际化。或者我可以在构建过程中替换.properties文件。无论如何,感谢您的解释:-) – AbstractMan 2010-10-13 07:43:21

+0

当您在构建期间讨论替换.properties文件时,我必须问:您的最终目标是什么?你只是想编译一个特定的区域? 因为您可以通过将以下内容添加到Module.gwt.xml中来实现这一点: 更多信息,请访问:http://stackoverflow.com/questions/1745315/how-to-create-a-development-debug-and-production-setup/1749507 – 2010-10-13 10:59:12

0

我们在此基于this根据客户端浏览器语言设置了区域设置。

只要下面的JavaScript添加到您的.html:

<script type="text/javascript"> 
var search = location.search; 
if(search.indexOf("locale") == -1){ 
    var lang = navigator.language!= null ? navigator.language : navigator.browserLanguage; 
    lang = lang.replace("-", "_"); 
    var metaTag = document.createElement('meta'); 
    metaTag.name = "gwt:property"; 
    metaTag.content = "locale=" + lang; 
    document.getElementsByTagName('head')[0].appendChild(metaTag); 
} 
</script> 

它看起来如果对应于区域设置META标记未设定,如果没有它查找浏览器语言,并添加适当的meta标签,EG:

<meta name="gwt:property" content="locale=fr"> 
+0

由于Etienne Neveu上面解释的原因,这对GWT不起作用。使用静态字符串国际化时,其他语言环境的文本根本不可用。它被硬编码到为特定排列生成的GWT编译生成的HTML/JS。 – Chepech 2013-05-01 16:48:26

+0

我们在我工作的内部项目中使用过它,你尝试过吗? – David 2013-05-02 20:51:25

+0

我很确定你没有使用静态字符串方法。 – Chepech 2013-07-02 21:29:55