2013-01-14 15 views
10

我在一个产品上工作,我们不得不担心本地化问题。目前,这是因为当我必须使用(或增加)的本地化字符串的工作流程:有更好的方式来管理本地化的字符串吗?

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

这3个步骤对任何字符串是一个真正的痛苦。有没有任何模式或方法可以使这个过程更容易?

+1

请注意重复使用相同的字符串,根据上下文,有些短语/句子/单词必须不同地翻译成其他语言。例如。根据句子的主题,斯拉夫语言中的动词共轭。 – svick

+0

@svick当然。我们通常尝试将所有东西放在一起(特别是使用String.Format样式字符串),并让翻译人员告诉我们什么时候需要更改 – Earlz

+0

如果这是干净的代码或使其执行速度更快? – Paparazzi

回答

5

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

代码是这样:

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

旁注:

  • 具有自动生成的ID以及多个RESX文件有给你的选择,合理数量的智能感知的额外好处。
  • 取决于翻译的处理方式,您最好不要担心RESX文件中的重复文本(除了可能会取消/取消某种字符串)。在翻译时处理重复字符串可能更容易。
+0

但是这只会让步骤3稍微好一点,所以它没有那么大的改进,不是吗? – svick

+1

@svick,你的电话。如“编译时间与运行时间检查”中的“稍微”一样。此外,如果按功能将字符串组织为文件,您可以通过合理数量的选择获得智能感知,如果全部在一个文件中 - 不是那么多。但至少你会得到编译时错误,而不是运行时。 –

0

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

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

这样,"MY_MAGIC_STRING"被替换到MyMagicString()方法的调用,它给你一些拼写/类型安全,使之更重构友好。

+0

发布仅包含链接的答案不是很有用。你可以添加一个关于图书馆的简短解释吗? – svick

+0

知道这会发生:S希望它现在更清楚一点。 – rodion

相关问题