JavaFX颜色选择器的语言

有没有办法改变ColorPicker文本的语言,如“自定义颜色……”,“当前颜色”,“新颜色”,“色调”,“饱和度”,“亮度”,“不透明度”,“节省“,”使用“,”取消“?

在此处输入图像描述

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


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

所有示例都将使用非内置的波兰区域设置( new Locale("pl", "PL") )。


解决方案1

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

 com/sun/javafx/scene/control/skin/resources/controls_pl_PL.properties 

把它放进去

 /lib/ext 

而已。

我不确定许可证中有关将自定义文件放在com.sun.*包中的内容,所以这是另一种解决方案。

解决方案2

创建上面的properties文件,但您可以将其命名为任何位置并将其放在任何位置。 让我们说它会

 path/to/my/resources/polish.properties 

创建两个类 – ResourceBundle.ControlResourceBundleControlProvider ( 阅读更多 ),像这样。

 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; } } 

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

 META-INF/services/java.util.spi.ResourceBundleControlProvider 

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

 CustomLocaleFxResourceBundleControlProvider 

完成JAR投入

 /lib/ext 

最简单的方法是使用预定义的语言环境之一,例如在创建ColorPicker之前添加下一行:

 Locale.setDefault(Locale.FRENCH); 

你会看到下一个UI:

法国颜色选择器

Interesting Posts