Java 如何在GWT中使用特定的语言环境将字符串转换为双精度?

Java 如何在GWT中使用特定的语言环境将字符串转换为双精度?,java,gwt,Java,Gwt,在java中,这很容易做到: NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); myNumber = nf.parse(myString); 然而,在GWT中我似乎不能做同样的事情。首先,我将区域设置合并到MyModule.gwt.xml中 <inherits name="com.google.gwt.i18n.I18N"/> <extend-property name="locale" values="sl

在java中,这很容易做到:

NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
myNumber = nf.parse(myString);
然而,在GWT中我似乎不能做同样的事情。首先,我将区域设置合并到MyModule.gwt.xml中

<inherits name="com.google.gwt.i18n.I18N"/>
<extend-property name="locale" values="sl_SI"/>

还有NumberFormat类:com.google.gwt.i18n.client.NumberFormat; 它使用“默认”区域设置。这里的默认值是指与“en_US”非常相似的固定区域设置,而不是由浏览器或应用程序选择的默认值

似乎没有办法将NumberFormat设置为接受不同的语言环境。坦率地说,我看不出有什么意义


我错过了什么吗?

不幸的是,没有。在GWT中,客户端上特定于语言环境的代码非常有限。您可以尝试使用本机JavaScript(尽管有所有缺点)

但我发现在这种情况下,只调用服务器方法更容易。首先,我通常不需要转换很多值,而且这种方法所需的速率很低,因此在这种情况下,通过网络发送字节的过度消耗是可以承受的

如果这不是您的选项,您只需要能够解析这样一个数字,我建议将区域设置的格式分开。如果您遵循以下方法,这比看起来更容易:

  • 找出小数点(逗号或点)是什么
  • 创建与非小数点或数字匹配的负模式,即:
    '[^0-9'+小数点+']'.
  • 使用此模式可从字符串中删除任何匹配项
  • 将小数点替换为
这允许解析。对于格式化,我没有一个好的解决方案。

尝试将
添加到html主机页

下面解释一下它为什么会这样工作:


下面是更广泛更详细的解释:

是否要根据特定的语言环境进行分析?还是应用程序的区域设置?(这可能不同于
default
)@Thomas:事实上我想这样做both@Christian:很好,它起作用了。请将其作为答案重新发布。在GWT中,目前不可能根据任何特定的语言环境进行解析。我很高兴地说Christian的解决方案
确实有效。如果语言环境是已知的,那么自己进行解析就很容易了,但是如果语言环境是外来的,那么使用有效的标准进行解析就有点繁琐了……如果您只有一个语言环境,他的解决方案就可以工作。当您需要根据与数据库中的对象一起保存的区域设置进行格式化时,您会怎么做?正如他提供的链接所解释的:提示:显式设置区域设置的首选时间是在调用GWT模块之前。通过在当前URL中添加或更改区域设置查询字符串并重新加载页面,可以从GWT模块中更改区域设置。请记住,重新加载页面后,您的模块将重新启动。您错过了最重要的一点:我在一个页面上有多个区域设置(例如,在允许人们在不同语言之间进行翻译的应用程序中)。所以一个全局的,固定的区域设置是不行的。啊,我明白了。这确实是一个问题。幸运的是,我现在没有。对我来说,一页只有一个区域设置。