
本文旨在解决在使用 Java XSL Transformer 类时,如何更改错误消息的区域设置。由于 Xalan 实现的限制,直接设置 Transformer 的区域设置不可行。本文将介绍通过设置 JVM 的全局区域设置来间接实现此目的的方法,并讨论其局限性。
在使用 Java XSL Transformer 类时,你可能会遇到错误消息以默认区域设置显示的问题。例如,当你的机器使用法语区域设置时,错误消息可能会以法语显示,但你可能希望它们以英语显示。 遗憾的是,不像 SAXParser 类那样,可以直接设置 Transformer 的区域设置。本文将探讨一种替代方案,以及它的一些局限性。
通过 JVM 参数设置全局区域设置
虽然不能直接为 Transformer 类设置区域设置,但可以通过设置 JVM 的全局区域设置来间接影响错误消息的语言。可以在启动 Java 应用程序时使用 -Duser.country 和 -Duser.lang 选项来设置这些属性。
立即学习“Java免费学习笔记(深入)”;
例如,要将区域设置设置为美国英语,可以使用以下命令:
java -Duser.country=US -Duser.lang=en YourApplication
这会将 JVM 的默认国家/地区设置为美国,并将语言设置为英语。因此,Xalan(默认的 Java XSLT 引擎)加载的错误消息资源将使用英语。
示例
假设你有一个名为 XSLTTransformation 的 Java 类,它使用 Transformer 类执行 XSLT 转换。你可以使用以下命令运行它,并将错误消息设置为英语:
java -Duser.country=US -Duser.lang=en XSLTTransformation
注意事项和局限性
- 全局影响: 使用这种方法会影响整个 JVM 的区域设置。这意味着不仅是 XSLT 转换,所有依赖于默认区域设置的应用程序部分都会受到影响。这可能不是你想要的结果,特别是如果你的应用程序需要支持多种区域设置。
- Xalan 实现的限制: Xalan 代码的设计方式是,消息资源始终根据默认区域设置加载。因此,没有直接的方法可以仅为 Xalan 设置一个特定的区域设置。
- 其他 XSLT 引擎: 此方法主要针对 Xalan 引擎。如果使用其他的 XSLT 引擎(例如 Saxon),可能需要查阅该引擎的文档,以了解如何更改错误消息的区域设置。
总结
虽然无法直接更改 Java Transformer 类的错误消息区域设置,但可以通过设置 JVM 的全局区域设置来间接实现此目的。但是,这种方法会影响整个 JVM,因此需要谨慎使用。 如果需要更精细的控制,可能需要考虑使用不同的 XSLT 引擎,或者修改 Xalan 的源代码(不推荐)。 遗憾的是,Xalan 本身似乎不支持在转换器级别配置区域设置。










