【问题标题】:Localizing sentences with dynamic content inserted in asp.net在 asp.net 中插入动态内容的句子本地化
【发布时间】:2012-11-01 21:29:24
【问题描述】:

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

【问题讨论】:

  • 这是String.Format 以它的方式工作的原因之一,它还允许您拥有不包含或以不同格式多次包含的参数...On Wed the 7th day of january vs Jan 7 等...两者都有一个日期作为参数,但可以重新措辞以允许本地化(好吧,日期是一个不好的例子,因为有很好的格式化程序,但你明白我的意思)
  • 是的,但这意味着我将资源文件发送给翻译人员,如下所示:我的名字是 {0},我 {1} 岁。此外,我可能需要小心在翻译中使用大括号(即使这不太可能)。
  • 您需要转义(双)花括号...It's {really} good ...It's {{really}} good 是的,这正是它们的样子,除非您还需要提供如果句子中没有明确暗示该值,则提供一些示例值。我不明白你怎么能避免这种情况?必须有一个 some 类型的占位符。其他人可能会给你一个更好的答案,但恐怕我不知道。
  • 我的意思是在翻译方面,他或她需要了解这些额外的信息。我想这是无法避免的,至少在从头开始制作一些东西时需要一些巨大的开销,如果这是解决方案,那么我宁愿坚持我们所拥有的。

标签: asp.net localization


【解决方案1】:

不幸的是,我曾为许多 Microsoft 软件进行本地化工作,我可以告诉您,这是司空见惯的事情。本地化人员习惯于查看带有占位符的字符串,在您的示例中(“我的名字是 {0},我是 {1} 岁”),这并不难理解。您可能应该为单数添加一个变体,因为如果值为 0 或 1,则年份中的 s 将不正确(但我知道这只是一个示例)。

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

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

【讨论】:

    【解决方案2】:

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

    CN:你赢了一辆汽车。 => 你赢得了一个{0}

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

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

    DE:Sie haben ein Auto gewonnen。

    但是

    Sie haben Ferien gewonnen(无文章)或 Sie haben eine Gurke gewonnen。 (不同的文章)。意大利语和其他语言也是如此。因此,您必须将文章包含到变量中。

    【讨论】:

    • 是的,占位符字符串适用于诸如姓名或数字之类的东西,但是将句子拼凑在一起是一个很大的禁忌,因为语法可能会妨碍您。有了一些创造力,翻译者可能会设法解决语法问题,但它不会很漂亮(例如:将“You won a {0}”翻译成“Won: {0}”,这样就没有文章是必需)。
    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多