我需要为非拉丁语言(简体中文,日文汉字等)创建i18n属性文件。在产品的Swing部分中,我们使用Java属性文件,其中包含原始UTF-8字符,Netbeans会自动将这些属性文件转换为8859-1对我们来说,效果很好。对于JavaFX,此策略不起作用。我们的策略恰好与该答案相符,在这种情况下似乎不起作用。
在对问题的调查中,我发现了这则旧文章,表明我需要使用它native2ascii
来转换属性文件中的字符。仍然不起作用。
为了消除尽可能多的变量,我创建了一个示例FXML项目来说明该问题。日语汉字中有三个国际化标签。第一个标签在FXML文档中具有文本。第二个从属性文件加载未转义的原始字符。第三个加载转义的Unicode(匹配native2ascii
输出)。
jp_test.properties
btn.one=閉じる
btn.two=\u00e9\u2013\u2030\u00e3\ufffd\u02dc\u00e3\u201a\u2039
jp_test.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?scenebuilder-preview-i18n-resource jp_test.properties?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="147.0" prefWidth="306.0" xmlns:fx="http://javafx.com/fxml">
<children>
<Label layoutX="36.0" layoutY="33.0" text="閉じる" />
<Label layoutX="36.0" layoutY="65.0" text="%btn.one" />
<Label layoutX="36.0" layoutY="97.0" text="%btn.two" />
<Label layoutX="132.0" layoutY="33.0" text="Static Label" textFill="RED" />
<Label layoutX="132.0" layoutY="65.0" text="Properties File Unescaped" textFill="RED" />
<Label layoutX="132.0" layoutY="97.0" text="Properties File Escaped" textFill="RED" />
</children>
</AnchorPane>
结果
如您所见,第三个标签显示不正确。
环境:
Java 7 u21,u27,u45,u51、32位和64位。(JavaFX 2.2.3-2.2.45)
Windows 7 Enterprise,专业版64位。
更新
我已验证属性文件是ISO 8859-1
默认情况下,大多数IDE(至少是NetBeans)都以unicode编码方式处理文件。如果要在NetBeans中创建属性文件并在其中输入日语文本,则输入的文本将自动编码为utf。要查看此内容以记事本(++)打开属性文件,您将看到日语字符已转义。
utf的转义字符“ 閉じる
”为“ \u9589\u3058\u308b
”,而反面的“ \u00e9\u2013\u2030\u00e3\ufffd\u02dc\u00e3\u201a\u2039
”为“ é–‰ã�˜ã‚‹
”。因此图中的程序输出是正确的。此外,如果您在NetBeans中重新打开jp_test.properties文件,您将看到转义的utf编码文本将被视为已解码。
编辑:根据评论,
它为什么这样做?
可能是因为您省略了-encoding
native2ascii的参数,所以系统的默认字符集可能不是UTF。这可能是该输出的原因。
另外,为什么Java和Swing的属性文件没有问题,
但FXML无法处理呢?
事实并非如此,因为“ FXML是Java”。唯一的区别也可能是“系统字符集的使用”与“在某些配置位置覆盖字符集”。
无论如何,我建议根据输入文件的编码使用native2ascii的正确编码参数。更具体地说,首先将属性文件转换为utf-8编码,然后再进行其余操作。如果您将NetBeans用作IDE,则不需要native2ascii。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句