【问题标题】:JavaFX 8 Localization of dialog's internal elementsJavaFX 8 对话框内部元素的本地化
【发布时间】:2015-05-13 11:07:41
【问题描述】:

我目前正在开发一个具有斯洛伐克语本地化的 JavaFX 应用程序,并且在应用程序内部我使用Alert 对话框来显示带有可扩展内容窗格的异常,如下图所示:

我想完全翻译这个对话框,它与HeaderTitleContent 配合得很好,但我找不到如何翻译可扩展区域的Show/Hide details 标签的方法。

所以我的问题可能有点笼统:如何更改/翻译 JavaFX 内部元素的文本?

提前感谢您的帮助。

PS:为了创建这个异常警报对话框,我使用code.makery.ch上的代码

【问题讨论】:

  • 对我来说似乎是一个错误 - 如果语言环境可用,则应翻译所有可本地化的字符串。您可以考虑在 fx 问题跟踪器中提交报告(如果它仍然在线,听说本月某个时候它将与核心 jdk 跟踪器合并)
  • @kleopatra 我没有使用正确的本地化设置区域设置或其他东西。我只是设置了所有具有可用公共设置器的标签。我应该使用正确的本地化来解决它吗?
  • hmm .. 核心 jdk 不提供斯洛伐克语吗?或者只是不通过 fx?
  • @kleopatra 不,斯洛伐克语不是默认语言环境。
  • 哎呀,这很糟糕 :-( 记得有一种方法可以将自定义语言环境提供程序挂钩到系统中,但不记得任何细节,抱歉。

标签: java javafx localization javafx-8


【解决方案1】:

对于您的特定用例,您可以向expandedProperty 添加另一个侦听器,这将覆盖“详细信息按钮”显示的文本:

Platform.runLater(() ->
{
    Hyperlink detailsButton = ( Hyperlink ) alert.getDialogPane().lookup( ".details-button" );

    alert.getDialogPane().expandedProperty().addListener(
            ( ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue ) ->
    {
        detailsButton.setText( newValue ? "My less text" : "My more text" );
    });

    // trigger listeners
    alert.getDialogPane().setExpanded( true );
    alert.getDialogPane().setExpanded( false );
});

有关更常见的黑客攻击,请参阅Localizing JavaFx Controls。从那里您需要将以下键放入自定义属性文件:

// translate these
Dialog.detail.button.more = Show Details
Dialog.detail.button.less = Hide Details

【讨论】:

  • 这看起来很不错,但我在查找.details-button 超链接时遇到了问题。在调试器中,我可以看到dialogPane 具有属性detailsButton,但查找方法返回null,我不知道如何从那里获取它。我尝试了几种字符串变体,但没有成功。
  • @Supermartzin 为我工作。您可能没有将代码放入 Platform.runLater()。
  • @NikšaBaldun 谢谢!我忘记了那部分,我还发现我一直在使用另一个属性。现在一切正常!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多