gpt4 book ai didi

java - 本地化 JavaFx 控件

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:49 26 4
gpt4 key购买 nike

我正在尝试为我的 JavaFx 控件语言添加 ResourceBundle,但未能成功。

我试图在类路径中添加 controls_fi_FI.properties.. 并希望它会起作用,但没有。

然后我查看了 JavaFx 的 ControlResources 类,它负责本地化控件,我注意到包的基本名称是“com\sun\javafx\scene\control\skin\resources\controls”。

如何将我的属性文件添加到这个包中?我觉得很奇怪,几乎没有关于如何执行此操作的信息?

最佳答案

我只能通过相当大的 hack 来让它工作,它甚至不能远程移植。然而,也许它会给你足够的工作来创建一个可行的解决方案。 (这适用于 Java 8。)

我创建了一个包com.sun.javafx.scene.control.skin.resources,并在其中用单行创建了一个controls_fi_FI.properties文件

ProgressIndicator.doneString=Valmis

我使用以下内容创建了一个测试应用:

import java.util.Locale;
import java.util.ResourceBundle;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
@Override
public void start(Stage primaryStage) {
System.out.println(ResourceBundle.getBundle("com/sun/javafx/scene/control/skin/resources/controls").getString("ProgressIndicator.doneString"));

BorderPane root = new BorderPane();
ProgressIndicator progressIndicator = new ProgressIndicator(1);
root.setCenter(progressIndicator);
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
Locale.setDefault(new Locale("fi", "FI"));
launch(args);
}
}

以大多数方式运行这个应用程序并没有按预期工作:虽然 System.out.println(...) 产生了正确的结果,但进度指示器中显示的文本是错误的。

但是,如果我将 com/sun/javafx/control/skin/resources/controls_fi_FI.properties 捆绑在一个 jar 文件中,并将该 jar 文件移动到 jre/lib/ext 我 JDK 安装的子目录(即与 jfxrt.jar 相同的位置),它按要求运行(至少在我的简单测试中;正如我所说,我对此不做任何声明成为任何一种可靠的解决方案)。

问题似乎是 ControlsResources 正在由扩展类加载器加载,因此使用相同的类加载器加载资源包。

如果你对类加载器的了解比我多,你也许可以将其塑造成一个合理的解决方案......

关于java - 本地化 JavaFx 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com