JavaFX颜色选择器的语言

Aly*_*ona 5 java javafx color-picker

有没有办法改变ColorPicker文字的语言,如"自定义颜色......","当前颜色","新颜色","色调","饱和度","亮度","不透明度","保存" ,"使用","取消"?

在此输入图像描述

3ph*_*h3r 4

编辑:以下答案适用于那些需要更多异国语言的人。如果您使用其中之一:de, es, fr, it, ja, ko, pt, sv, zh@sergey-grinev 提供了足够的答案。


我想出了两个解决方案。两者都依赖于properties文件。com/sun/javafx/scene/control/skin/resources/您可以根据 JRE提供的示例创建自己的示例jxfrt.jar

所有示例都将使用new Locale("pl", "PL")非内置的波兰语言环境 ( )。


解决方案1

创建具有以下结构的 JAR 文件(相应更改后缀)

com/sun/javafx/scene/control/skin/resources/controls_pl_PL.properties
Run Code Online (Sandbox Code Playgroud)

并将其放入

<path_to_JVM>/lib/ext
Run Code Online (Sandbox Code Playgroud)

就是这样。

我不确定许可证对将自定义文件放入com.sun.*包中有何说明,因此这是另一个解决方案。

解决方案2

像上面一样创建properties文件,但您可以将其命名为任何名称并将其放置在您想要的任何位置。假设它将是

path/to/my/resources/polish.properties
Run Code Online (Sandbox Code Playgroud)

像这样创建两个类 - ResourceBundle.Controland ResourceBundleControlProvider了解更多)。

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);
    }
}
Run Code Online (Sandbox Code Playgroud)
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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译这些类并将它们与您的资源和文件夹一起放入 JAR 文件中META-INFMETA-INF文件夹应具有以下结构

META-INF/services/java.util.spi.ResourceBundleControlProvider
Run Code Online (Sandbox Code Playgroud)

java.util.spi.ResourceBundleControlProvider是一个文本文件,其中只有一行是类的路径ResourceBundleControlProvider 。在我们的例子中只是

CustomLocaleFxResourceBundleControlProvider
Run Code Online (Sandbox Code Playgroud)

完整的JAR放入

<path_to_JVM>/lib/ext
Run Code Online (Sandbox Code Playgroud)