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