我想设置一个简单的服务器,其中包含用于不同消息的密钥和翻译的数据库。我不同的其他应用程序将请求此服务器,这将只给他们提供有关它们的消息列表,比如JSON。然后,不同的应用程序会将此列表“编译”为几个可以使用的经典i18n .properties文件。
优点是翻译服务与不同的应用程序不相关,必须在应用服务器上重新部署甚至更新nofile。我甚至可以设置一个GUI来对消息进行siplify操作。
此外,我发现在我工作的不同项目中,属性文件的手动维护可能会非常麻烦超时(一个语言环境缺少标签,当文件变大时很难找到哪一个,我们以前使用过一个管理和生成.properties文件的中央excel文件,但它只是一个巨大的混乱)。
无论如何,你认为这是一个好的/可行的想法吗?有关如何做到这一点的任何见解?如何轻松地将JSON转换为.properties? (有工具吗?)(或者我应该使用除JSON之外的其他格式?)。感谢您的任何评论:)
答案 0 :(得分:1)
说实话,我不知道你为什么要重新发明轮子,让它更像方形。
可行吗?是的。
你应该这样做吗?的 没有 强>
也就是说,您可以使用JSON提供翻译,这没有任何问题。这通常是有道理的。
什么不是,将所有翻译放在数据库中。如果你这样做,我希望本地化者一切顺利 在标准文本文件中修改翻译(特别是如果它是UTF-8编码...)比在数据库中更容易。 谈到翻译,您可能希望(或被迫)聘请翻译服务提供商。这些家伙有自己的翻译记忆系统和机器翻译系统,猜猜怎么样?他们不关心您的数据库,也不关心GUI。他们希望以标准方式处理翻译,即使用典型的文件格式。 Java属性文件恰好是其中之一。数据库脚本不是......
现在,关于如何将Java属性文件转换为JSON。假设您使用的是Java,它相当简单。您首先需要阅读您的属性文件:
// you somehow need to detect a Locale
ResourceBundle messages = ResourceBundle.getBundle("messages", locale);
您检测Locale的方式取决于上下文。例如,您可能希望在用户配置文件中分配一个(允许用户更改其区域首选项),或者您可能希望创建一个将语言标记作为参数的Web服务。在这两种情况下,它可能会归结为:
Locale locale = Locale.forLanguageTag(langTag);
其中langTag
是包含所需语言标记的String
(从用户个人资料中读取,建议使用,或作为对Web服务调用的参数读取)。
当您阅读资源文件时,您需要做的就是获取所需的部分并将其放入地图:
Map<String, String> keyToTranslation = new HashMap<>();
for (String key : messages.keySet()) {
// filter the key somehow, for example:
// if (key.startsWith(moduleName))
keyToTranslation.put(key, messages.getString(key));
}
然后您可以使用Jackson将地图转换为JSON。实际上,任何JAX-RS兼容的库(如RESTEasy)都会在内部使用它来执行转换。
使用完全不同的技术堆栈,即使用Node.js,当然可以进行这种转换。但是,要记住的事情很少:
ResourceBundle
为你处理这个问题,如果你想使用别的东西,最好把它放在脑后。答案 1 :(得分:0)