有没有办法将GWT静态字符串i18n与服务器提供的属性一起使用?

有没有办法将GWT静态字符串i18n与服务器提供的属性一起使用?,gwt,Gwt,我正在寻找一个棘手问题的解决方案。 我希望使用GWT静态字符串国际化,因此使用常量、ConstantsWithLookup和消息,但是字符串必须在运行时来自服务器,而不是编译时 是否已经有这样一个项目,或者我应该编写自己的GWT生成器 谢谢所有帮助我的人 更新:字典不是一个选项,因为应用程序几乎完成,我无法为此更改所有应用程序 更新2:事实上,如果字典由类似Costants或类似Messages的界面包装,则字典是一个选项。有两个选项:好的和不太好的 好: 标准的方法是,所有语言排列都经过优化,

我正在寻找一个棘手问题的解决方案。 我希望使用GWT静态字符串国际化,因此使用常量、ConstantsWithLookup和消息,但是字符串必须在运行时来自服务器,而不是编译时

是否已经有这样一个项目,或者我应该编写自己的GWT生成器

谢谢所有帮助我的人

更新:字典不是一个选项,因为应用程序几乎完成,我无法为此更改所有应用程序


更新2:事实上,如果字典由类似Costants或类似Messages的界面包装,则字典是一个选项。

有两个选项:好的和不太好的

好: 标准的方法是,所有语言排列都经过优化,并在使用它们的地方进行内联(即,将日本公司名称放入HTML模板中,作为按钮/列/标题)

因为全套i18n可以通过支持多元化和消息构建器、@nnoations和自动i18n进行精心设计,所以它更可取。它也是最快的性能选择

不太好:
通常是因为您需要使用遗留系统,所以好还不够好。在这里,您只需要在框中获取文本,而不是所有的火箭小部件。然后使用,并将字符串放入页面中,添加一些类似于旧式词典对象的内容。

有两个选项:好的和不太好的

好: 标准的方法是,所有语言排列都经过优化,并在使用它们的地方进行内联(即,将日本公司名称放入HTML模板中,作为按钮/列/标题)

因为全套i18n可以通过支持多元化和消息构建器、@nnoations和自动i18n进行精心设计,所以它更可取。它也是最快的性能选择

不太好:
通常是因为您需要使用遗留系统,所以好还不够好。在这里,您只需要在框中获取文本,而不是所有的火箭小部件。然后使用,并将字符串放入页面中,添加一些类似于老式字典对象的内容。

您要求的根本不是静态i18n。GWT的i18n几乎全是静态的一些原因:

  • 它是一个同步API。从服务器获取资源需要异步API在整个应用程序中传播(即,将未来传递给小部件,告诉它从服务器获取字符串后从何处获取其内部文本)或者你必须基本上阻止应用程序的执行,直到i18n资源在开始下载(这会给用户带来糟糕的体验)
  • 我们可以优化生成的代码,使其仅包含应用程序中消息实际需要的格式化程序和相关数据。如果您不包含任何复数消息,我们就不必包含该代码,等等。在大多数情况下,表达式可以内联,死代码可以删除,类引用可以完全删除
  • 我们可以在编译时使用在运行时很难或很昂贵的东西。例如,简单地解析消息格式字符串需要相当多的代码,而这些代码都不需要包含在编译输出中。假设您从服务器获取应用程序的字符串,发现其中一个字符串中有{0,localtime,YMd}——现在您需要ICU4J来本地化它——哎呀!即使它可以全部编译成JS,它也将是巨大的。也许您可以通过这种方式支持GWT的i18n的一个子集,但是您必须包括可能从消息引用的每个格式化程序,即使它们中的大多数永远不会被引用

如果你真的想要动态i18n,那么按照其他答案的建议去做,并使用字典(但是请注意,如果你的应用程序的消息有任何复杂性,你将无法正确地本地化)。如果你需要更多的,那么咬紧牙关,使用静态i18n。

你要求的根本不是静态i18n。GWT的i18n几乎全是静态的一些原因:

  • 它是一个同步API。从服务器获取资源需要异步API在整个应用程序中传播(即,将未来传递给小部件,告诉它从服务器获取字符串后从何处获取其内部文本)或者你必须基本上阻止应用程序的执行,直到i18n资源在开始下载(这会给用户带来糟糕的体验)
  • 我们可以优化生成的代码,使其仅包含应用程序中消息实际需要的格式化程序和相关数据。如果您不包含任何复数消息,我们就不必包含该代码,等等。在大多数情况下,表达式可以内联,死代码可以删除,类引用可以完全删除
  • 我们可以在编译时使用在运行时很难或很昂贵的东西。例如,简单地解析消息格式字符串需要相当多的代码,而这些代码都不需要包含在编译输出中。假设您从服务器获取应用程序的字符串,发现其中一个字符串中有{0,localtime,YMd}——现在您需要ICU4J来本地化它——哎呀!即使它可以全部编译成JS,它也将是巨大的。也许您可以通过这种方式支持GWT的i18n的一个子集,但是您必须包括可能从消息引用的每个格式化程序,即使它们中的大多数永远不会被引用
如果你真的想要动态i18n,那么按照其他答案的建议去做,并使用字典(但是请注意,如果你的应用程序的消息有任何复杂性,你将无法正确地本地化)。如果你需要更多的东西,那就咬紧牙关