如何在FXML文档中为视图提供不同的语言以支持许多国家?
用ResourceBundle小号来存储区域设置相关的文本,并使用访问包中的数据"%resourceKey"。
ResourceBundle
"%resourceKey"
具体来说,为您要支持的每种语言创建文本文件,并将其放在类路径中。该对的JavadocResourceBundle对命名方案的细节,但你应该有一个默认包通过定义BaseName.properties和捆绑其他语言和变形的定义BaseName_xx.properties。例如(resources目录位于类路径的根目录中):
BaseName.properties
BaseName_xx.properties
resources
资源/UIResources.properties:
greeting = Hello
资源/UIResources_fr.properties:
greeting = Bonjour
然后在您的FXML文件中,您可以执行
<Label text = "%greeting" />
传递ResourceBundle给FXMLLoader做:
FXMLLoader
ResourceBundle bundle = ResourceBundle.getBundle("resources.UIResources"); FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/FXML.fxml"), bundle); Parent root = loader.load();
此代码将加载与默认语言环境(通常是您在操作系统级别设置的语言环境)相对应的资源包,如果找不到对应的资源束,则回退到默认语言。如果要强制它使用特定的捆绑包,则可以执行
ResourceBundle bundle = ResourceBundle.getBundle("/resources/UIResources", new Locale("fr"));
最后,如果您需要访问FXML控制器中的资源包,则可以将其注入type ResourceBundle和name 字段中resources:
public class MyController { @FXML private ResourceBundle resources ; // ... }