2014-05-23 29 views
2

我正在尋找一些幫助(和一些工具)進行高級本地化。我使用了一個Node後端,所以我更喜歡JS中的工具/庫。高級字符本地化

我目前使用本地化爲不同語言的屬性文件進行一些簡單的字符串替換。

home_en.properties

page.title=My Site 
page.header=Hello %s 

home_de.properties

page.title=Meine Seite 
page.header=Hallo %s 

到目前爲止好......但這裏是我試圖解決一些更高級的例子:

倍數

我需要能夠正確翻譯倍數,例如:

您收到1條消息

VS

你有2個消息

我不希望有邏輯在我的代碼,說

if (i == 1) { // use page.messages.singular } 
else { // use page.messages.plural } 

,因爲我不認爲支票屬於我的業務邏輯,我知道不同的語言對待單數/複數的方式不同(即單數包括0)

多倍數

一些問題,因爲上面,但現在的倍數的多種組合,例如:

您有%d封未讀郵件和%d讀取消息

您有%d封未讀郵件和%d自述先賢,以及%d民營通知

性別

這裏是我想解決一個例子:

我愛我的%s

和可能的值是cat, dog, horse

英語沒有問題,但在德語中,這將需要:

home_de。性能

animals.like.male=Ich liebe meinen %s 
animals.like.female=Ich liebe meine %s 
animals.like.neutral=Ich liebe mein %s 

那麼這將導致不必要的條目英語:

home_en.properties

animals.like.male=I love my %s 
animals.like.female=I love my %s 
animals.like.neutral=I love my %s 

問題

這對以下問題全部長篇大論設置:

那裏有哪些工具/庫可以解決像這樣的高級字符串本地化

+0

我刪除了答案,因爲它看起來不能用開源版本的Closure模板完成:https://groups.google.com/forum /#!topic/closure-templates-discuss/rbki3JX3lRo –

回答

0

以下答案適用於通用翻譯方法,不限於特定的本地化框架。但是,爲了簡單起見,我會選擇i18next來說明如何完成這些想法。

倍數(多元化)

一般來說,「Mutliples」你指的是一種在許多本地化框架被稱爲「多元化」的概念。

複數形式的字符串表示存在影響字符串輸出內容的變量。

下面的代碼顯示了帶有計數變量的字符串如何滿足您的需要。 (參考:http://i18next.com/pages/sample.html

所以,你可以創建一個這樣的字符串:

{ 
    "app": { 
     "new_messgae": "You have __count__ message.", 
     "new_messgae_plural": "You have __count__ messages." 
    } 
} 

多倍數(多計多串)

處理這類的方法字符串是棘手的,但通常我們將具有> 1個變量的單個字符串分成具有1個變量的2個/多個複數字符串。

性別(絃樂與上下文)

有關特定上下文字符串(例如:性別),你可以利用的「上下文」功能定位框架,使得它的工作原理。 (請訪問http://i18next.com/pages/sample.html的「上下文」部分了解相關信息)

+0

非常感謝您的回答。我以前沒有聽說過'i18next',所以我一定會研究它。儘管我有兩個關於你的答案的問題:1)我理解複數方法,但是你在哪裏定義何時使用複數?例如,法語,其中0被認爲是單數。或其他語言不只有2種形式。 2)如何將「1」個變量的句子「分離」爲1個變量的幾個字符串。這通常是本地化的第一個規則,不要將字符串分開並在稍後重新組合。 – Steve

+0

1)不同語言的多元化規則在這裏明確定義http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html。 – Cowcow02

+0

2)對於這種方法的進一步解釋,我希望這適用於你http://stackoverflow.com/questions/1888487/internationalising-sentences-with-two-plural-words – Cowcow02