2009-02-05 24 views
4

我正在開發一個網絡項目,希望有一天能夠以多種語言提供(我說「希望」,因爲雖然今天我們只有一個英文網站計劃,但我公司的其他產品是多語言的,我是希望我們也能成功,也需要這樣做)。將大量標記文字國際化的最佳做法?

我知道最佳實踐(我在這裏使用Java,Spring MVC和Velocity)是將用戶在外部文件中看到的所有文本,以及通過名稱引用到UI文件中如:

#in messages_en.properties: 
welcome.header = Welcome to AppName! 

#in the markup 
<title>#springMessage("welcome.header")</title> 

但是,其從來沒有過要經歷這個過程的一個項目我自己,我很好奇,想解決這個問題的最好辦法是什麼,當你有一個沉重的UI的一些細分標記,如:

<p>We are excited to announce that Company1 has been acquired by 
<a href="http://www.companydivisionx.com" class="boldLink">Division X</a>, 
a fast-growing division of <a href="http://www.company2.com" class="boldLink">Company 2</a>, Inc. 
(Nasdaq: <a href="http://finance.google.com/finance?q=blah" class="boldLink">BLAH</a>), based in... 

我能想到的一個選擇是將這個「低等級l「的message.properties中的標記,但這似乎是最糟糕的選擇。

,我能想到的其他選項是:

  • 商店每個非標記內片段messages.properties,如acquisitionAnnounce1acquisitionAnnounce2acquisitionAnnounce3。這似乎雖然乏味。
  • 將此消息分解爲更多可重用組件,例如Company1.name,Company2.name,Company2.ticker等,因爲其中的每一個都可能在許多其他消息中重用。這可能會佔該特定消息中80%的字數。

是否有任何最佳做法來處理國際化與這種標記沉重的文字?你只需要咬下去,並承擔分解每一段文本的痛苦?您親自處理的任何項目的最佳解決方案是什麼?

回答

6

通常,如果您使用模板引擎(如SitemeshVelocity),則可以更有效地管理這些較小的HTML構建塊作爲子模板。

通過這樣做,您可以漸進式地將純粹國際化的字符串歸爲組,並使它們與這些標記子模板相關。在使用跨越同一語言環境中的多語言以及多語言環境的應用程序的模板完成了這類工作之後,我們從未將標記放置在我們的消息包中。

我建議一個關鍵的良好做法是避免在所有成本內放置標記(即使在低級別,因爲你把它)在消息屬性文件這對於釋放地獄的潛力並不是什麼可以忽略的東西 - 咬人子彈並正確地分手,遠遠不如管理許多分散的HTML標記文件所帶來的痛苦。它的重要,你可以想像的標記作爲整體塊和散射處處會讓日常開發一個苦差事,因爲:

  • 你會失去IDE顏色高亮和語法驗證
  • 高可能性,即一個區域文件或其他可以很容易地在設計/標記更改過濾器丟失時錯過了

打破事情(對於一個現實的觀點,例如邏輯句子結構,但沒有更精細)在前面有些艱辛,但值得付出努力。

關於弦細數粒度,這裏有我們做了什麼樣:

comment.atom-details=Subscribe To Comments 
    comment.username-mandatory=You must supply your name 
    comment.useremail-mandatory=You must supply your email address 
    comment.email.notification=Dear {0}, the comment thread you are watching has been updated. 
    comment.feed.title=Comments on {0} 
    comment.feed.title.default=Comments 
    comment.feed.entry.title=Comment on {0} at {1,date,medium} {2,time,HH:mm} by {3} 


    comment.atom-details=Suscribir a Comentarios 
    comment.username-mandatory=Debes indicar tu nombre 
    comment.useremail-mandatory=Debes indicar tu direcci\u00f3n de correo electr\u00f3nico 
    comment.email.notification=La conversaci\u00f3n que estas viendo ha sido actualizada 
    comment.feed.title=Comentarios sobre {0} 
    comment.feed.title.default=Comentarios 
    comment.feed.entry.title=Comentarios sobre {0} a {1,date,medium} {2,time,HH:mm} por {3} 

所以,你可以用在消息包這也可以幫助你保存它的邏輯意義,但允許你如何替換字符串有趣的事情你在句子中操縱它。

+1

不知道我是否完全理解管理這些較小構建塊作爲子模板的好處。是不是所有來自子模板的字符串仍然會進入相同的messages.properties? – 2009-02-05 17:14:41

+0

是的,你仍然會有很多字符串 - 我想我的觀點是你不能真正避免它。防止大量消息字符串的一種策略是將消息包字符串放在數據庫中,這是明智的。 – 2009-02-05 17:16:54

3

首先,不要拆分你的字符串。這使得本地化人員難以翻譯文本,因爲他們無法看到要翻譯的整個字符串。

我可能會嘗試使用鏈接周圍的佔位符:

< A HREF = 「%鏈接1%」 級= 「%link1class%」 > X部門</A >

這就是我如何做當我將網站本地化爲30種語言時。這不是完美的,但它的工作原理。

我不認爲從字符串中刪除所有標記是可能的(或簡單的),你需要有一種方法來插入URL和任何額外的標記。

2

你應該避免打破你的字符串。這不僅成爲翻譯的噩夢,而且還會產生語法假設,這在目標語言中可能不正確。

儘管佔位符可以對很多事情有所幫助,但我不會建議使用URL佔位符。這使您可以自定義不同區域設置的URL。畢竟,當他們的語言環境是阿根廷西班牙語時,將它們發送到英文頁面毫無意義!

6

正如其他人所說,請不要將字符串拆分爲段。你會讓翻譯者悲傷,因爲他們必須強迫他們的語言語法符合你無意中創建的特別規則。通常不可能提供語法正確的翻譯,特別是如果您在不同的上下文中重複使用某些段。

不要刪除標記。

請不要假設專業翻譯工作在記事本:)計算機輔助翻譯(CAT)工具,如Trados套件,非常瞭解標記。如果標記是HTML,而不是一些自定義的XML格式,則不需要特別的準備。 Trados將保護標籤免受意外修改,同時仍然允許在必要時進行更改。請注意,某些標籤元素通常需要進行本地化,例如,替代文字或一些查詢字符串,所以只是剝離所有的標記不會。

最重要的是,除非您正在進行零預算的個人項目,否則請考慮聯繫本地化供應商。本地化就像網頁設計一樣是一項服務。有能力的供應商將幫助您爲您的項目選擇最佳解決方案/格式,並指導您完成源材料的準備工作並納入本地化結果。當然,他們和他們的譯員將擁有所有必要的工具。 (全面披露:我是翻譯/本地化專家。並且不要分割字符串:)