2012-10-31 61 views
2

我即將本地化一個以webforms(asp.net)編碼的Web應用程序,我很想知道多部分本地化內容的最佳方法。爲了說明這個問題:當你翻譯一個句子,如:「我的名字是Jonhy,我已經12歲了」,如果你認爲名字和年齡是動態檢索的,可能需要改變名字的位置和年齡在翻譯中使其在語言上在語法上是正確的。我想我們可以使用string.Format,並將{0}和{1}放在資源文件中並讓翻譯器處理。不過,我想知道是否有更好的方法來實現這一目標?我確信這經常會出現。本地化在asp.net中插入動態內容的句子

+0

這是'String.Format'工作方式的原因之一,它也允許您使用不同的格式包含或包含多次的參數......'在第7天的週三1月7日,等等...兩者都會有一個日期作爲參數,但可以重新措辭,以允許本地化(好吧,日期的一個不好的例子,因爲有很好的格式化程序,但你明白了我的觀點) – Basic

+0

確實如此,但這意味着我將資源文件發送給翻譯員,其格式如下所示:我的姓名爲{0},我的年齡爲{1}歲。另外,我可能需要小心在翻譯中使用大括號(儘管這不是可能的事)。 – SynBiotik

+0

你需要擺脫(雙)大括號......「這真是太好了......」真的很好,是的,這就是他們看起來的樣子,除了你也會需要提供一些示例值,如果該值沒有明確暗示該句子。我看不出如何避免這種情況?必須有一個_some_排序的佔位符。可能有人可以給你更好的答案,但恐怕我不知道。 – Basic

回答

3

我有很多微軟軟件本地化的不幸,我可以告訴你這很平常。定位器習慣於用佔位符來查看字符串,在您的示例中(「我的名字是{0},我是{1}歲」),這並不難理解。您應該添加一個單數變體,因爲如果數值爲零或一個(但我知道這只是一個示例),年數中的s將是不正確的。

大公司甚至擁有專有軟件來定義和驗證單個字符串的規則,然後用它們確保譯員不會引入錯誤,如格式不正確的佔位符或使字符串比可接受的長。

對於佔位符字符串,最好使用註釋功能(即鍵入Visual Studio資源編輯器中的「註釋」列),以便您可以告訴本地化人員關於佔位符的信息,併爲他們提供一些示例。然後他們有權在需要時重新排列佔位符。但請注意,即使您這樣做,本地化人員也會出錯(而且他們的時間收入不高),所以在涉及佔位符時,錯誤是司空見慣的。一個真實的例子是打印頁面底部的{1}「字符串的{0}(例如,與頁數有關的」1 of 3「)。最常見的法語翻譯是直接翻譯「{0} de {1}」,它在頁面計數的特定上下文中不正確,在此上下文中應該爲「{0} sur {1}」。但是大多數印刷應用程序在法文中都會翻譯錯誤。如果他們不知道如何使用字符串,你不能責怪譯員。

2

Clafou很好的回答。它實際上變得更加複雜:

EN:你贏了一輛車。 =>您贏得了{0}

現在你認爲你可以把任何東西在那裏,像小船,假日等

不幸的是,在其他語言中的文章並不總是相同的。

DE:Sie haben ein Auto gewonnen。

SIE haben Ferien gewonnen(沒有文章)或SIE haben EINE Gurke gewonnen。 (不同的文章)。意大利語和其他語言也是如此。所以你必須將文章加入變量。

+1

是的,佔位符字符串對於諸如名字或數字之類的東西是很好的,但是將句子拼湊在一起是一個很大的禁忌,因爲語法可能會阻礙它。有了一定的創造力,翻譯者可能會設法解決語法問題,但它不會很漂亮(例如:翻譯「您贏得了{0}」,翻譯爲「Won:{0}」,因此沒有文章需要)。 – Clafou