JavaFX 颜色选择器的语言
Language of JavaFX color picker
有没有办法更改 ColorPicker
的文本语言,例如 "Custom Color..."、"Current Color"、"New Color"、"Hue"、"Saturation", "Brightness", "Opacity", "Save", "Use", "Cancel"?
最简单的方法是使用一种预定义的语言环境,例如在创建 ColorPicker 之前添加下一行:
Locale.setDefault(Locale.FRENCH);
你会看到下一个 UI:
编辑:下面的答案是为那些需要更多奇异语言的人准备的。如果您使用其中之一: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
并将其放入
<path_to_JVM>/lib/ext
就是这样。
我不确定许可证中关于将自定义文件放入 com.sun.*
包中的内容,所以这是另一个解决方案。
解决方案 2
像上面那样创建properties
文件,但您可以随意命名并将其放置在任何您想要的位置。假设它将是
path/to/my/resources/polish.properties
像这样创建两个 classes - ResourceBundle.Control
和 ResourceBundleControlProvider
(read more)。
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;
}
}
编译那些 classes 并将它们与您的资源和 META-INF
文件夹一起放入 JAR 文件中。 META-INF
文件夹应具有以下结构
META-INF/services/java.util.spi.ResourceBundleControlProvider
java.util.spi.ResourceBundleControlProvider
是一个文本文件,其中只有一行是 ResourceBundleControlProvider
class 的路径。在我们的例子中,它只是
CustomLocaleFxResourceBundleControlProvider
完整的 JAR 放入
<path_to_JVM>/lib/ext
有没有办法更改 ColorPicker
的文本语言,例如 "Custom Color..."、"Current Color"、"New Color"、"Hue"、"Saturation", "Brightness", "Opacity", "Save", "Use", "Cancel"?
最简单的方法是使用一种预定义的语言环境,例如在创建 ColorPicker 之前添加下一行:
Locale.setDefault(Locale.FRENCH);
你会看到下一个 UI:
编辑:下面的答案是为那些需要更多奇异语言的人准备的。如果您使用其中之一: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
并将其放入
<path_to_JVM>/lib/ext
就是这样。
我不确定许可证中关于将自定义文件放入 com.sun.*
包中的内容,所以这是另一个解决方案。
解决方案 2
像上面那样创建properties
文件,但您可以随意命名并将其放置在任何您想要的位置。假设它将是
path/to/my/resources/polish.properties
像这样创建两个 classes - ResourceBundle.Control
和 ResourceBundleControlProvider
(read more)。
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;
}
}
编译那些 classes 并将它们与您的资源和 META-INF
文件夹一起放入 JAR 文件中。 META-INF
文件夹应具有以下结构
META-INF/services/java.util.spi.ResourceBundleControlProvider
java.util.spi.ResourceBundleControlProvider
是一个文本文件,其中只有一行是 ResourceBundleControlProvider
class 的路径。在我们的例子中,它只是
CustomLocaleFxResourceBundleControlProvider
完整的 JAR 放入
<path_to_JVM>/lib/ext