存储/使用多种语言的最佳方式

时间:2009-03-24 16:33:37

标签: c#

如果我想创建一个支持多种语言的c#应用程序,我应该如何存储它们?

我可能会在应用程序中使用常量作为值持有者。

如: Console.Write(FILE_NOT_FOUND);

编译时,它将变为由语言确定的字符串。 我可能会坚持使用3种语言(丹麦语,英语,德语),但我认为这并不重要。

为每种语言创建一个类文件似乎是一种浪费,在编译应用程序时会处理所有这些文件。这也意味着每次要更改字符串时都必须重新编译并重新分发整个程序。 据我所知,硬编码字符串是一件坏事。

也许是一个文本文件? English.txt 第1行:FILE_NOT_FOUND =找不到文件。再试一次 2号线 3号线 等

Danish.txt 第1行:FILE_NOT_FOUND =文件blev ikke fundet。 Prøvizgen 2号线 3号线 等

等等。 如果用户选择英语,则会读取文本文件并设置不同的常量值。

我能想到的最后一个是将它放在SQL数据库中。

你可以给我一些意见吗? :)

另外,我尝试写FILE _ NOT _ FOUND(没有空格,但文本编辑器不会让我

4 个答案:

答案 0 :(得分:7)

使用资源文件。这是处理本地化的标准方法。

有关详细信息,请see this tutorial.

---编辑---

另一个教程是available here.这个教程使用了更好的命名,因此它可能更清晰。

答案 1 :(得分:4)

我认为您最好的选择是使用.NET Framework的内置本地化资源。您可以阅读有关here的机制的更多信息。

至于使用数据库存储你的本地化元素(文本,图像等),这当然是一种常见的选择,但我认为这很明显,因为开发人员理解从数据库获取数据,而不是使用卫星程序集和喜欢。使用数据库存在许多问题,所以我只列举几个:1)增加了应用程序部署的复杂性2)数据库服务器上的附加负载,3)你在哪里存储本地化的消息来说明数据库已关闭:))

使用某种文本文件(可能是XML)也会带来一些部署问题,但更重要的是,“动态”进行文本更改的高度灵活性有些过高。除了拼写错误和笨拙的措辞之外,随着应用程序文本的更改,您几乎总是会发布新版本。

答案 2 :(得分:2)

在此处查看本地化/国际化样本:

http://msdn.microsoft.com/en-us/goglobal/bb688096.aspx

我也听说过有关this book的好消息。

答案 3 :(得分:0)

此主题对于回复来说太大了。

使程序为新语言做好准备的过程通常称为“国际化”或“i18n”,获取该程序并实际运行的过程是“本地化”或“l10n”。

简而言之,您希望将硬编码字符串替换为字符串资源,如您所说,然后通常为不同语言创建不同的资源文件。假设您正在使用.NET(对C#而言是一个相当不错的假设),那么Microsoft会做很多事情来简化它。

请记住,除了语言之外还有其他本地化问题。例如,丹麦货币符号可能不是'$',而是欧元符号,日期几乎肯定是缩写的,许多地方使用','作为小数点和'。'。千万分隔符,与英国惯例相反。