翻译和本地化问题

本文关键字:问题 本地化 翻译 | 更新日期: 2023-09-27 18:15:40

微软c#运行时的实现是否提供了一些本地化机制来翻译常见的字符串,如Overflow, Stack overflow, Underflow等?

请看下面的代码——它是Mono的一部分,Mono本身有一个Locale.GetText例程来进行这样的翻译。

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

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

翻译和本地化问题

。. NET提供了一个框架,可以很容易地本地化您的内容(ResourceManager),虽然它内部维护一些翻译为自己的目的(例如DateTime.ToString为您提供适合本地的日期/时间的文本表示,其中包括翻译后的月份和日期名称),但它不为您提供任何现成的翻译,无论它们是通用字符串还是非通用字符串。无论如何,它很难可靠地做到这一点,因为有太多的人类语言,单词可以根据上下文等有不同的翻译。

在您的示例中,我会说您可以使用未翻译的异常消息。尽管Microsoft建议您本地化异常描述,而且他们确实本地化了自己的异常描述(至少对于主要语言),但这个建议似乎是欠考虑的,因为翻译所有这些用户可能永远不会看到的文本不仅是浪费精力,而且还会使调试成为一场噩梦。

是的,这是个糟糕的主意。

不添加资源文件

你对资源文件有什么反对意见?资源是为。net应用程序或程序集提供本地化和可本地化的字符串、图像和其他数据的指定方式。

请注意,示例代码中所示的单个单词替换将导致低质量的翻译。不同的语言有不同的句子结构和词序,单词替换是无法适应的。在非英语语言中,名词的性别和词性的变化往往反映了它们在短语中的作用和数量。单词替换在这一点上失败得很惨。

你的非英语客户很可能更喜欢你不要通过试图部分翻译文本来破坏他们的语言,这里一个词,那里一个词。如果您要为支持可本地化的消息而烦恼,请正确处理并允许翻译整个字符串,以便翻译人员可以正确地完成单词排序和缩减。在内容可变的情况下,将格式字符串作为资源,以便翻译人员可以使用该语言的约定来设置可变数据。