翻译和本地化问题

时间:2011-11-25 21:56:28

标签: c# .net exception localization mono

Microsoft的C#运行时实现是否提供了一些本地化机制来翻译OverflowStack overflowUnderflow等常见字符串...

请参阅下面的代码 - 它是Mono的一部分,Mono本身有一个Locale.GetText例程来进行此类翻译。

// Added to avoid possible integer overflow.
if (inputOffset > inputBuffer.Length - inputCount)
    throw new ArgumentException("inputOffset" +
                                Locale.GetText("Overflow");

现在 - 如何在Microsoft版本的运行时中完成它,如何使用它,例如,在不添加资源文件的情况下获取Overflow的本地化等效项?

3 个答案:

答案 0 :(得分:3)

.NET提供了一个框架,可以轻松地本地化您的内容(ResourceManager),同时在内部维护一些翻译用于其自身目的(例如DateTime.ToString为您提供日期的文本表示/本地适当的时间,包括翻译的月份和日期名称),为您提供任何现成的翻译,无论是否为常见字符串。无论如何,它很难可靠地做到这一点,因为那里有大量的人类语言,根据具体情况,单词可以有不同的翻译等。

在您的示例中,我会说您可以使用未翻译的异常消息。虽然微软recommends that you localize exception descriptions和他们自己本地化(至少对于主要语言),但这个建议似乎没有考虑到,这不仅浪费了翻译用户可能永远不会看到的所有文本的努力,而且{{{ 3}}

答案 1 :(得分:1)

是的,确实如此,这是一个糟糕的主意。它使调试变得更加困难。

答案 2 :(得分:0)

  
    

不添加资源文件

  

您对资源文件有什么看法?资源是为.NET应用程序或程序集提供本地化和可本地化的字符串,图像和其他数据的规定方式。

请注意,示例代码中显示的单字替换会导致翻译质量低下。不同的语言具有不同的单词替换不能容纳的句子结构和单词顺序。非英语语言通常涉及名词的性别和单词的变化,以恰当地反映他们在短语中的角色和数量。单词替换在此失败了。

您的非英语客户很可能更愿意通过尝试在此处部分翻译文字和在那里翻译单词来对您的语言进行部分翻译。如果您要解决支持可本地化消息的问题,请正确执行并允许翻译整个字符串,以便翻译人员可以正确地完成单词排序和变换。如果内容是可变的,请将格式字符串作为资源,以便翻译人员可以使用该语言的约定来设置变量数据。