【发布时间】:2015-06-19 04:35:15
【问题描述】:
有没有办法更改ColorPicker 的文本语言,例如“自定义颜色...”、“当前颜色”、“新颜色”、“色调”、“饱和度”、“亮度”、“不透明度”、“保存”、“使用”、“取消”?
【问题讨论】:
-
对于其他语言的标准系统窗口的翻译这里有一些信息:stackoverflow.com/a/45980313/3937190
标签: java javafx color-picker
有没有办法更改ColorPicker 的文本语言,例如“自定义颜色...”、“当前颜色”、“新颜色”、“色调”、“饱和度”、“亮度”、“不透明度”、“保存”、“使用”、“取消”?
【问题讨论】:
标签: java javafx color-picker
编辑:以下答案适用于那些需要更多异国语言的人。如果您使用其中之一: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"))。
创建具有以下结构的 JAR 文件(相应地更改后缀)
com/sun/javafx/scene/control/skin/resources/controls_pl_PL.properties
并将其放入
<path_to_JVM>/lib/ext
就是这样。
我不确定许可证中关于将自定义文件放在 com.sun.* 包中的内容,所以这里有另一个解决方案。
像上面一样创建properties 文件,但是您可以将其命名为任意名称并将其放置在您想要的任何位置。假设它会是
path/to/my/resources/polish.properties
像这样创建两个类 - 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;
}
}
编译这些类并将它们与您的资源和META-INF 文件夹一起放入JAR 文件中。 META-INF 文件夹应具有以下结构
META-INF/services/java.util.spi.ResourceBundleControlProvider
java.util.spi.ResourceBundleControlProvider 是一个文本文件,其中只有一行是ResourceBundleControlProvider 类的路径。在我们的例子中,它只是
CustomLocaleFxResourceBundleControlProvider
完整的JAR放入
<path_to_JVM>/lib/ext
【讨论】:
<jdk_installation_directory>/jre/lib/ext 中有jfxrt.jar。复制它,将扩展名更改为zip,解压并查看我的答案中提到的目录。
toJar文件夹,全选,右键,添加到ZIP压缩包(取决于你安装的软件)。之后将结果.zip 的扩展名更改为.jar。您可以从 eclipse 项目中的 bin 目录中选择 .class 文件。在您的情况下,首先将它们移动到默认包 - JAR 中声明的包和路径必须相同。
最简单的方法是使用预定义的语言环境之一,例如在创建 ColorPicker 之前添加下一行:
Locale.setDefault(Locale.FRENCH);
您将看到下一个 UI:
【讨论】: