代码之家  ›  专栏  ›  技术社区  ›  Billy Coover

将短语翻译与String.Format集成

  •  1
  • Billy Coover  · 技术社区  · 16 年前

    String.Format("I have {0} dogs and {1} cats", 1, 2)
    

    我试图解决的问题是“我有{0}只狗和{1}只猫”这个短语需要翻译成其他语言。

    在这个西班牙语翻译示例中,英语短语“我有{0}只狗和{1}只猫”和翻译短语“Tengo{0}perros y gatos{1}”存储在数据库中。

    如果用户要将“Tengo{0}perros y gatos{1}”更改为“Tengo{0}perros y gatos{3}”,则在调用String.Format(“Tengo{0}perros y gatos{3}”,1,2)时将引发System.FormatException。

    6 回复  |  直到 16 年前
        1
  •  1
  •   Kamiel Wanrooij    16 年前

    我会将翻译的短语与存储的原始短语进行比较,以检查占位符的数量和类型是否相等。

    解析原始英语短语,并检查占位符,例如使用正则表达式: /\{\d+\}/

        2
  •  5
  •   Ian P    16 年前

    在保存到数据库之前,为什么不看看是否抛出String.Format?如果是这样--不要让用户保存。

        3
  •  1
  •   Webleeuw    16 年前

    嗯,我认为你的用户不应该改变你的翻译字符串,除非他们知道他们在做什么。通常,应该告诉翻译人员,{0},{1}代表可重放的参数,并且不应该更改。IMHO说,除了翻译人员以外的所有其他人都不能访问这些字符串。

        4
  •  1
  •   Wookai    16 年前

    你可以做两件事:

    1. 检查翻译人员保存新翻译时是否没有发生这种情况,即您可以搜索{XX},并查看最大数量是否与原始翻译不同。如果是这样,不要保存新的。
    2. 当显示它时,如果有这样的错误,捕获异常并返回到您知道是正确的默认语言。
        5
  •  1
  •   Jeff Kotula    16 年前

    在UI方面,在他们完成编辑后,您可以向他们显示一个实际填充参数化值的示例翻译。这将起到双重作用:验证它们的格式化字符串,并让它们对其在上下文中的外观进行可视化的双重检查。

        6
  •  0
  •   Hamish Grubijan    16 年前

    另一个想法是:

    为该用户提供一个检查工具,用户可以在进行更改后运行该工具。