我即將本地化一個以webforms(asp.net)編碼的Web應用程序,我很想知道多部分本地化內容的最佳方法。爲了說明這個問題:當你翻譯一個句子,如:「我的名字是Jonhy,我已經12歲了」,如果你認爲名字和年齡是動態檢索的,可能需要改變名字的位置和年齡在翻譯中使其在語言上在語法上是正確的。我想我們可以使用string.Format,並將{0}和{1}放在資源文件中並讓翻譯器處理。不過,我想知道是否有更好的方法來實現這一目標?我確信這經常會出現。本地化在asp.net中插入動態內容的句子
回答
我有很多微軟軟件本地化的不幸,我可以告訴你這很平常。定位器習慣於用佔位符來查看字符串,在您的示例中(「我的名字是{0},我是{1}歲」),這並不難理解。您應該添加一個單數變體,因爲如果數值爲零或一個(但我知道這只是一個示例),年數中的s將是不正確的。
大公司甚至擁有專有軟件來定義和驗證單個字符串的規則,然後用它們確保譯員不會引入錯誤,如格式不正確的佔位符或使字符串比可接受的長。
對於佔位符字符串,最好使用註釋功能(即鍵入Visual Studio資源編輯器中的「註釋」列),以便您可以告訴本地化人員關於佔位符的信息,併爲他們提供一些示例。然後他們有權在需要時重新排列佔位符。但請注意,即使您這樣做,本地化人員也會出錯(而且他們的時間收入不高),所以在涉及佔位符時,錯誤是司空見慣的。一個真實的例子是打印頁面底部的{1}「字符串的{0}(例如,與頁數有關的」1 of 3「)。最常見的法語翻譯是直接翻譯「{0} de {1}」,它在頁面計數的特定上下文中不正確,在此上下文中應該爲「{0} sur {1}」。但是大多數印刷應用程序在法文中都會翻譯錯誤。如果他們不知道如何使用字符串,你不能責怪譯員。
Clafou很好的回答。它實際上變得更加複雜:
EN:你贏了一輛車。 =>您贏得了{0}
現在你認爲你可以把任何東西在那裏,像小船,假日等
不幸的是,在其他語言中的文章並不總是相同的。
DE:Sie haben ein Auto gewonnen。
但
SIE haben Ferien gewonnen(沒有文章)或SIE haben EINE Gurke gewonnen。 (不同的文章)。意大利語和其他語言也是如此。所以你必須將文章加入變量。
是的,佔位符字符串對於諸如名字或數字之類的東西是很好的,但是將句子拼湊在一起是一個很大的禁忌,因爲語法可能會阻礙它。有了一定的創造力,翻譯者可能會設法解決語法問題,但它不會很漂亮(例如:翻譯「您贏得了{0}」,翻譯爲「Won:{0}」,因此沒有文章需要)。 – Clafou
- 1. 插入Div內容動態地由JavaScript
- 2. 插入動態html內容
- 3. 嵌套內容本地化的ASP.NET
- 4. 本地化/國際化靜態和動態內容,客戶端
- 5. ASP.NET本地化翻譯HTML內容
- 6. 如何本地化iphone中的動態內容?
- 7. ASP.NET動態內容
- 8. 的WebView插入/修改內容動態
- 9. Mysql在內容中插入帶引號的文本語句
- 10. 如何使用動態數量的連詞本地化句子?
- 11. jQuery Mobile動態內容插入
- 12. 無法在動態插入的內容中點擊
- 13. asp.net:動態擴展內容
- 14. 動態內容ASP.net C#
- 15. Asp.net,jQuery和動態內容
- 16. ASP.Net中動態內容的選項
- 17. 如何從checkedlistbox中選擇項目文本動態地在asp.net中插入
- 18. 如何高效地緩存asp.net mvc中的動態內容?
- 19. 動態地在QListWidget中插入項目
- 20. Angular中動態內容的國際化?
- 21. 在圖像swiper中插入動態內容
- 22. 動態,本地化NSString的
- 23. 列表內容動態地
- 24. 如何隱藏li元素中的所有內容並動態地插入div
- 25. 將原子內容插入到CKEditor中
- 26. 插入wordpress插件內容到帖子
- 27. 等待動態插入的內容存在
- 28. 負載動態內容放入容器中AngularJS版本1.4
- 29. 使用本地化內容的ASP.NET PasswordRecovery控件
- 30. asp.net將動態行插入表中間
這是'String.Format'工作方式的原因之一,它也允許您使用不同的格式包含或包含多次的參數......'在第7天的週三1月7日,等等...兩者都會有一個日期作爲參數,但可以重新措辭,以允許本地化(好吧,日期的一個不好的例子,因爲有很好的格式化程序,但你明白了我的觀點) – Basic
確實如此,但這意味着我將資源文件發送給翻譯員,其格式如下所示:我的姓名爲{0},我的年齡爲{1}歲。另外,我可能需要小心在翻譯中使用大括號(儘管這不是可能的事)。 – SynBiotik
你需要擺脫(雙)大括號......「這真是太好了......」真的很好,是的,這就是他們看起來的樣子,除了你也會需要提供一些示例值,如果該值沒有明確暗示該句子。我看不出如何避免這種情況?必須有一個_some_排序的佔位符。可能有人可以給你更好的答案,但恐怕我不知道。 – Basic