编辑:以下答案适合那些需要更多内容的人exotic语言。如果您使用其中之一:de, es, fr, it, ja, ko, pt, sv, zh
@sergey-grinev 提供了足够的答案。
我想出了两个解决方案。两者都依赖properties
文件。您可以根据中找到的示例创建自己的com/sun/javafx/scene/control/skin/resources/
in jxfrt.jar
随 JRE 一起提供。
所有示例都将使用波兰语语言环境(new Locale("pl", "PL")
)不是内置的。
解决方案1
创建具有以下结构的 JAR 文件(相应更改后缀)
com/sun/javafx/scene/control/skin/resources/controls_pl_PL.properties
并将其放入
<path_to_JVM>/lib/ext
就是这样。
我不确定许可证中关于将自定义文件放入的内容是什么com.sun.*
包,所以这是另一个解决方案。
解决方案2
Create properties
文件与上面类似,但您可以将其命名为任何名称并将其放置在您想要的任何位置。假设它会是
path/to/my/resources/polish.properties
创建两个类 -ResourceBundle.Control
and ResourceBundleControlProvider
(阅读更多 https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/resourcebundlecontrolprovider.html#create-implementations-of-resourcebundle.control) 像这样。
public class CustomLocaleFxResourceBundleControl extends ResourceBundle.Control {
static final String FX_BASE_NAME = "com/sun/javafx/scene/control/skin/resources/controls";
private static final Locale MY_LOCALE = new Locale("pl", "PL");
@Override
public String toBundleName(String baseName, Locale locale) {
if (FX_BASE_NAME.equals(baseName) && MY_LOCALE.equals(locale))
return "path/to/my/resources/polish"; // without extension
return super.toBundleName(baseName, locale);
}
}
public class CustomLocaleFxResourceBundleControlProvider implements ResourceBundleControlProvider {
private static final ResourceBundle.Control MY_RESOURCE_BUNDLE_CONTROL = new CustomLocaleFxResourceBundleControl();
public ResourceBundle.Control getControl(String baseName) {
if (CustomLocaleFxResourceBundleControl.FX_BASE_NAME.equals(baseName))
return MY_RESOURCE_BUNDLE_CONTROL;
return null;
}
}
编译这些类并将它们与您的资源一起放入 JAR 文件中META-INF
文件夹。META-INF
文件夹应具有以下结构
META-INF/services/java.util.spi.ResourceBundleControlProvider
java.util.spi.ResourceBundleControlProvider
是一个文本文件,只有一行是路径ResourceBundleControlProvider
班级。在我们的例子中只是
CustomLocaleFxResourceBundleControlProvider
完整的JAR放入
<path_to_JVM>/lib/ext