use*_*946 5 java localization javafx
我正在尝试为JavaFx控件添加我的语言的ResourceBundle,但我没有这样做.
我试图在类路径中添加controls_fi_FI.properties ..并希望它可以工作,但没有.
然后我查看了JavaFx的ControlResources类,它负责本地化控件,我注意到bundle的基本名称是"com\sun\javafx\scene\control\skin\resources\controls".
如何将我的属性文件添加到此捆绑包中?我觉得奇怪的是,几乎没有关于如何做到这一点的任何信息?
我只能通过相当大规模的黑客攻击才能让它工作,这甚至不能远程移植。然而,也许它会给你足够的空间来创建一个可行的解决方案。(这适用于 Java 8。)
我创建了一个包com.sun.javafx.scene.control.skin.resources,并用单行在其中创建了一个controls_fi_FI.properties 文件
ProgressIndicator.doneString=Valmis
Run Code Online (Sandbox Code Playgroud)
我使用以下内容创建了一个测试应用程序:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
运行此应用程序的大多数方式都无法按预期工作:虽然会System.out.println(...)产生正确的结果,但进度指示器中显示的文本是错误的。
但是,如果我捆绑com/sun/javafx/control/skin/resources/controls_fi_FI.properties一个 jar 文件,并将该 jar 文件移动到jre/lib/ext我的 JDK 安装的子目录(即与 相同的位置jfxrt.jar),它会按要求运行(至少在我的简单测试中;正如我所说,我不做声称这是任何一种稳健的解决方案)。
问题似乎是ControlsResources由扩展类加载器加载,并且使用相同的类加载器加载资源包。
凭借比我更好的类加载器知识,您也许能够将其塑造成一个合理的解决方案......
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |