【问题标题】:Localizing a legacy product?本地化遗留产品?
【发布时间】:2014-12-19 22:59:36
【问题描述】:

比较简单的问题。我需要翻译/本地化旧版 Java 应用程序。

我们公司的新应用程序使用 Java 中的 .properties 文件来本地化其字符串,这个概念与 C# 中的 .resx 文件非常相似(我们也有产品使用它)。

问题在于,这是在我们开始考虑本地化之前就已经存在的遗留产品。它充满了硬编码字符串以及各种形式的硬编码字符串连接/格式。

据我所知,我有一项非常艰巨的任务:将所有字符串和格式设置为产品中的 .properties 文件,然后在代码中引用这些文件。

就我个人而言,做这项工作没有什么大问题,但我想确保我没有遗漏任何东西。

所以我有几个一般性问题。

  • 有没有更快的方法将我的产品转换为使用 .properties 文件?在我的脑海中,我可以写一个脚本 这将使 30-40% 的工作自动化......

  • 是否有任何我应该担心的特定于转换旧版的“陷阱” 产品(我不是在寻找一般本地化“陷阱”,我 可以谷歌搜索,但任何特定于这种情况的东西)?

  • 最后,有没有我忽略的完全不同的策略 本土化?这就是我们翻译现有产品的方式, 但因为这是一个遗留产品(并且在议程上 重写)这本质上是一次性代码,我可以做任何我想做的事情。包括刚刚 找到最便宜最脏最快的方法,虽然我是 显然倾向于正确地完成工作。

各位,有什么想法吗?

作为指导方针,我会说尽量将答案集中在所提出的问题上,但任何提供信息的贡献或问题总是欢迎在 cmets 中。

【问题讨论】:

    标签: java localization translation legacy


    【解决方案1】:

    不,没有更快的方法。您必须逐行浏览代码。

    有很多陷阱,因为国际化不仅仅是字符串常量。

    您可能已经知道数字格式和日期格式需要本地化,但您需要注意通过连接或 StringBuilder.append 调用将数字和日期嵌入到字符串中。您还需要注意隐式 toString() 调用,例如当提供数字或日期作为 Swing 模型值时(例如,从 TableModel.getValueAt 方法返回数字),或者当 JSP或者 JSF EL 表达式直接引用这样的值而不是格式化它。

    同样,请留意直接向用户显示的枚举常量,隐式调用他们的 toString() 方法。

    通过字符串连接创建句子是一个问题,不仅因为数字、日期和枚举的格式,还因为其他语言可能具有不同的句子结构顺序。此类字符串连接应替换为本地化的 MessageFormats。

    击键需要本地化,包括所有助记符(如果是桌面应用程序,还包括加速器)。

    布局是个问题。应用程序假定从左到右方向的地方是您想要解决的问题;即使您只打算针对其他从左到右的语言进行本地化,您也可能知道推迟良好的 i18n 实践是在以后自找麻烦。

    如果您的应用是 Swing 应用,您需要将 LEFT/WEST 和 RIGHT/EAST 布局约束转换为 LINE_START 和 LINE_END。如果您的应用程序是 Web 应用程序,您需要将 margin-left、margin-right、padding-left、padding-right、border-left 和border-right (可能还有许多我忘记的其他内容)分解为特定于语言的 CSS 块。

    Swing 应用程序还需要在构建每个窗口后调用 applyComponentOrientation,通常是在调用 pack() 之前。

    一些程序员喜欢将部分 UI 存储在数据库中。我不是在谈论用户内容(你不应该本地化);我说的是标签文本、窗口标题、布局约束等等。我个人非常不喜欢这种做法,但人们会这样做。如果您的应用程序正在这样做,我猜数据库表需要一个区域设置列,或者需要完全删除将 UI 存储在数据库中的做法。

    回答您的最后一个问题,如果有比单步执行代码更好的策略,我从未听说过。当然,您可以只在代码中搜索双引号字符。我想选择取决于您的上级希望应用程序看起来有多专业和完善。

    我学到的一件事是,丢弃的代码通常不是。如果重写最终试图从旧版本中挽救大量代码,请不要感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2018-05-25
      相关资源
      最近更新 更多