我目前正在开发桌面游戏,作为我CS课程的一部分
虽然不是必需的,但我希望我的应用程序支持本地化
所以我浏览了网页,发现了两种技术
- ResourceBundle
- 属性文件
但是我无法确定哪个更适合我,我只需要GUI的本地化消息和标签
我也很困惑这些文件/类应该如何命名为
例如,如果FooBar扩展了ResourceBundle
应该像FooBar_UNIX_en_US
顺便说一句,作业是一个纠缠(由gopherwoods工作室)克隆(桌面不是小程序)
〜感谢
答案 0 :(得分:1)
您的方向正确,约定通常为Name_<language>_<country>
。
ResourceBundle
本身可以使用属性文件来支持本地化字符串,因此您可以使用它。这样,您就不必为要支持的每个本地化编译新类。只需为该语言创建一个新的属性文件。
查看ResourceBundle.getBundle()工厂方法。
答案 1 :(得分:1)
您同时使用 - 从您的程序的角度来看,它们是ResourceBundles,从翻译者的角度来看它们是属性文件。 ResourceBundle可以从属性文件加载其字符串(仅限字符串)。
所以你只需输入Messages.properties
(默认),Messages_eo.properties
(世界语翻译),Messages_de.properties
(德语翻译),Messages_de_AT.properties
等文件(奥地利语的特殊字符串)德国人,压倒一般的人。)
在您的程序中,您只需执行ResourceBundle bundle = ResourceBundle.getBundle("Messages")
,然后运行时从属性文件为当前区域设置构建资源包。
如果您需要翻译除字符串之外的其他内容,则需要.class
文件,继承ResourceBundle。你甚至可以混合两者,但我会更好地将它们分成不同的包(即一个text
包和一个用于动态资源)。
答案 2 :(得分:0)
我相信使用资源包是最好的技术。
Java本身将尝试通过最具体到最不具体(最通用)来引用您的资源bundels。
如果您有以下资源:
resource
resource_en
resource_en_GB
resource_fr
resource_fr_CA
本地最终用户是en_NZ(New Zeland),他将会看到resource_en中的内容。
但是,来自加拿大魁北克省的人很可能会看到resource_fr_CA中的内容。
希望有所帮助。