【问题标题】:Is there a better way of managing localized strings?有没有更好的方法来管理本地化字符串?
【发布时间】:2012-12-28 16:41:00
【问题描述】:

我正在开发一个我们不得不担心本地化的产品。目前,这是我必须使用(或添加)本地化字符串时的工作流程:

  1. 搜索resources.resx 文件(包含数百个项目)
  2. 如果找到,则复制名称。否则,添加一个新字符串并复制名称
  3. 然后,使用 ResourceFactory.ResourceMgr.GetString("MY_MAGIC_STRING")(其中 ResourceMgr 只是 ResourceManager 的静态字段)

对于任何字符串,这 3 步过程真的很痛苦。是否有任何模式或方法可以使这个过程更容易?

【问题讨论】:

  • 小心重复使用相同的字符串,根据上下文,有些短语/句子/单词必须以不同的方式翻译成其他语言。例如。斯拉夫语中的动词变位取决于句子的主语。
  • @svick 当然。我们通常会尝试将所有内容放在一起(尤其是通过使用 String.Format 样式字符串)并让翻译人员告诉我们何时需要更改
  • 如果这是一个干净的代码或者让它执行得更快?
  • @Blam 主要是为了干净的代码(尽管更多的性能永远不会受到伤害)

标签: c# .net localization resourcemanager


【解决方案1】:

可以访问每个单独字符串的自动生成文件更易于使用 - 将 RESX 文件的“自定义工具”设置为 PublicResXFileCodeGenerator

代码如下:

using MyProject.Resources;
...
localizedText = Resources.SomeReasonableName;

旁注:

  • 拥有多个 RESX 文件以及自动生成的 ID 具有智能感知的额外优势,可为您提供合理数量的选择。
  • 根据翻译的处理方式,您最好不要担心 RESX 文件中的重复文本(可能是 OK/cancel 类型的字符串除外)。在翻译时处理重复的字符串可能更容易。

【讨论】:

  • 但这只会让第 3 步稍微好一点,所以这并不是什么大的改进,不是吗?
  • @svick,您的来电。 “稍微”,如“编译时与运行时检查”。此外,如果字符串按功能组织到文件中,您将获得智能感知,即如果全部在一个文件中,则选择合理数量 - 不是那么多。但至少你得到的是编译时错误而不是运行时错误。
【解决方案2】:

有这个 Java 解决方案可能会给你一些想法: http://rodionmoiseev.github.com/c10n/

这个想法是在源代码本身中存储翻译,使用接口方法上的注释。然后,通过使用特殊实用程序,您可以动态创建代理(动态实现接口的类),在调用接口方法时将返回本地化字符串值。

这样,"MY_MAGIC_STRING" 被替换为对 MyMagicString() 方法的调用,这为您提供了一些拼写/类型安全性,并使其对重构更加友好。

【讨论】:

  • 发布仅包含链接的答案并不是很有用。您能否简要说明一下该库的作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多