Java/Vaadin中的语言切换是如何工作的?我有一个网络应用程序,并想集成一个组合框,它改变了这个应用程序中的每个文本的语言。是否需要标记每个需要手动翻译的文本并定义其翻译?将此函数实现到exting项目中有多复杂?
发布于 2019-10-17 20:24:54
是否需要标记每个需要手动翻译的文本并定义其翻译?
您应该使用ResourceBundles来存储/读取字符串的翻译。
如何在Java/Vaadin中进行语言切换?
您需要提供一个实现I18NProvider的类。有关这方面的文档可以在here中找到
一旦正确实现,您将能够在任何组件上调用getTranslation("HelloWorld") (因此在任何视图上,因为它们必须扩展组件),以接收在当前UI-Locale的ResourceBundle-file中定义的键"HelloWorld“的翻译。
当区域设置发生更改时,会通知扩展LocaleChangeObserver的视图,然后您可以再次调用getTranslation("HelloWorld")来查找新设置的语言的翻译。
我想集成一个组合框,它可以改变这个应用程序中每个文本的语言。
参见我的this SO answer,我在那里发布了一个充当语言切换器的Select组件的示例代码。它同时使用ResourceBundle和I18NProvider。(您也可以使用ComboBox,但缺点是您只能显示所选值的字符串)
这段代码中最重要的部分是Select有一个ValueChangeListener,它设置VaadinSession的区域设置,这反过来将触发视图现在应该实现的LocaleChangeObserver的localeChange方法。在localeChange方法中,您可以重新翻译视图中每个组件的可翻译字符串;在Labels中设置新文本,为TextFields设置新标签和占位符,等等。
将此函数实现到exting项目中有多复杂?
这在很大程度上取决于您对complex的定义,以及您对ResourceBundles的熟悉程度。当然,还有比这更简单的主题,但I18N从来都不容易。在我看来,Vaadin为开发者提供了一种在我们的应用程序中使用I18N的方法,这是一项非常伟大的工作。
发布于 2019-10-17 19:19:37
基本上,您使用键和值系统为每种语言创建一个文本文件,在该文件中使用键和翻译值命名每个翻译后的消息。然后,您可以使用这些键(应该是预定义的)来获取所需语言的正确消息。这些文件可以是任何东西,但是如果你正在寻找一个简单的java实现,那么有一些非常简单的方法可以做到。有关示例,请查看here。
发布于 2019-10-17 19:53:18
https://stackoverflow.com/questions/58431328
复制相似问题