【问题标题】:Good practice for layered application with internationalization国际化分层应用的良好实践
【发布时间】:2016-07-26 10:26:58
【问题描述】:

我正在设计一个想要国际化的 JSE 新应用程序。 我从来没有做过这样的申请。我正在寻找有关国际化的最佳实践。将翻译后的数据写入文件或数据库中的应用程序。我搜索了最佳实践,但没有找到任何关于我的主要问题(第一个问题)的信息。

  • 我应该将所有国际化数据放在某个层还是它们所涉及的对象旁边?

  • 我可以直接使用属性文件作为一种枚举来做一个开关案例吗?
    或者我可以对捕获的数据进行逆向工程并了解默认的国际化值并使用它吗?

【问题讨论】:

标签: java internationalization


【解决方案1】:

我确实遇到了几种策略。我将从一个属性文件开始。

一个因素是数据必须得到专业的维护

  • 将其保存在版本控制中。
  • 为我们人类保留一个版本号,“1.0.23”
  • 保持文本井井有条,以帮助翻译。
  • 保留带有词汇表的第二个属性文件,以实现一致的翻译。

此外,我确实看到了从 DocBook XML、Excel、翻译记忆库生成属性或 java ListResourceBundles。是的,数据库。

必须小心维护数据,因为不同的各方会在不同的时间使用文本。 编程工具、一致性检查和准备数据、通信是不容忽视的任务。

属性文件并不完全理想,但 IDE 通常对它们有一些支持。

为 UTF-8 设置所有内容,但请注意属性文件使用 ISO-8859-1,但您可以在构建过程中使用 \uXXXX 转义或进行编码转换。生成的 ListResourceBundle java 源将是一个替代方案。

【讨论】:

  • 谢谢,这很有帮助,但是我可以将所有属性文件放在专用包中,还是应该将属性文件放在使用它们的文件旁边?在读回创建的文件时,反向工程是否是一种在 switch case 上工作的可能方法?
  • 一个人想要防止重复的文本或不同的样式。这意味着在 i18n 等顶级软件包中至少有一个大文件作为翻译的基础。您是否需要每个模块的属性文件,以及与主翻译记忆库的一些集成是一个选择问题。关于最后一个问题:可以生成带有“xyz=[xyz]”等条目的测试语言环境和/或在缺少的翻译日志上显示“[xyz]”?
  • 所以我应该制作一个包含所有通用翻译的大文件(添加/删除/...)并将特定翻译放在小文件中?我想要做的是读取文件/数据库中的翻译文本并在属性文件中查找以找到值的“名称”切换到默认属性文件并在切换案例上使用这个新值。这可以实现吗?这不会花费太多时间吗?
  • 您可以使用一个单一的 ResourceBundle,当它变得太大时,通过将其转换为 ListResourceBundle 来提高性能,这是一个带有字符串数组/“映射”的 .java。另一方面,我发现 XML 作为属性生成的来源也很优雅:cmets 和分层分组是可能的。我在一个案例中使用的简单 DocBook XML。
猜你喜欢
  • 2010-09-14
  • 2010-09-13
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2019-11-06
  • 2011-02-05
相关资源
最近更新 更多