使用在asp.net中插入的动态内容本地化句子

时间:2012-10-31 15:31:43

标签: asp.net localization

我即将本地化以webforms(asp.net)编码的Web应用程序,我想知道多部分可本地化内容的最佳方法。为了说明这个问题:当你翻译一个句子时:“我的名字是Jonhy而我已经12岁了”,如果你假设名字和年龄是动态检索的,可能需要更改名字的位置和翻译中的年龄使其在目标语言中具有语法正确性。我以为我们可以只使用string.Format并将{0}和{1}放在资源文件中并让翻译人员处理。但是,我想知道是否有更好的方法来实现这一目标?我确信这很常见。

2 个答案:

答案 0 :(得分:4)

我很幸运地致力于大量微软软件的本地化,我可以告诉你这很平常。本地化程序用于查看带占位符的字符串,在您的示例中(“我的名字是{0}且我{1}岁”),这并不难理解。你可能应该为singular添加一个变体,因为如果值为零或一个,则年中的s将是不正确的(但我知道这只是一个例子)。

大型公司甚至拥有专有软件来定义和验证单个字符串的规则,然后用于确保翻译人员不会引入错误的占位符等错误或使字符串超出可接受的范围。

对于占位符字符串,最好使用注释功能(即键入Visual Studio资源编辑器中的“注释”列),以便您可以告诉本地化器有关占位符的信息并给出一些示例。然后,如果需要,他们有权重新排序占位符。但请注意,即使你这样做,本地化程序也是错误的(而且他们的时间并没有很好的报酬)所以当涉及到占位符时,错误就很常见了。一个真实的例子是“{0}的{1}”字符串,它位于打印页面的底部(例如“1 of 3”,与页数有关)。最常见的法语翻译是字面翻译“{0} de {1}”,它在页面计数的特定上下文中不正确,在此上下文中应该是“{0} sur {1}”。但大多数进行打印的应用程序都会在法语中翻译错误。如果他们不知道如何使用字符串,你就不能责怪翻译人员。

答案 1 :(得分:3)

Clafou的回答很好。它实际上变得更加复杂:

EN:你赢了一辆车。 =>你赢了{0}

现在你认为你可以放任何东西,如船,假期等。

不幸的是,在其他语言中,文章并不总是相同。

DE:Sie haben ein Auto gewonnen。

但是

Sie haben Ferien gewonnen (没有文章)或 Sie haben eine Gurke gewonnen 。 (不同的文章)。对Italien和其他语言也一样。所以你必须将文章包含在变量中。