2012-03-08 23 views
7

tl; dr:我正在尋找一種在Jade模板中進行國際化的優雅方法。本質上,問題歸結爲我必須對變量中的字符串進行插值,而不是逐字代碼。帶Express/Jade的I18N:帶嵌入式標籤和插值的字符串

問題的詳細信息:

在單語玉模板我可以做一個元素嵌入標籤和變量,像這樣:

p Posted by 
    span.author= post.author 
    | on 
    span.date= post.author 

要達到這樣的

<p>Posted by <span style="author">The Author</span> on 
<span style="date">2012-03-08</span></p> 

但是,當我想將這個國際化,我需要一個字符串,因爲在每種語言中,詞序不一樣。另外,我想隱藏翻譯HTML的細節,只是給他們這樣一行:

Posted by #{author} on #{date} 

現在,當我通過這個字符串的國際化-ED版玉模板i18n.posted_by_on,它不會做插值就可以了,所以最好的,我可以做的是:

- var author = '<span class="author">$</span>'.replace('$',post.author); 
- var date = '<span class="date">$</span>'.replace('$',post.date); 
- var header = i18n.posted_by_on 
     .replace('#{author}',author) 
     .replace('#{date}',date); 
p!= header 

這主要是違背了漂亮的翡翠模板的點,因爲我必須手動完成所有的插值。有沒有什麼方法可以更好,更緊湊,更易讀?

回答

4

你可能已經找到了解決方案(如果有的話,請告訴我們是什麼),但如果你沒有,你可能想看看i18next-node庫。它支持變量,所以你可以做這樣的事情:

// Localized resources 
{   
    'en-GB': { 
    translation: { 
     space_temperature_is: 'Space temperature is __COUNT__ degrees Celsius.' 
    } 
    } 
    'fr-FR': { 
    translation: { 
     space_temperature_is: 'Température de l'espace est de __COUNT__ degrés Celsius.' 
    } 
    } 
}; 

然後,在你的玉模板,你會怎麼做:

// This translates to "Space temperature is 28 degrees Celsius." 
i18n.t('space_temperature_is', { COUNT: 28 }); 

該庫確實有據可查的,但是,如果你是匆忙,這裏的an article,我發現有用的快速介紹。

+0

我從來沒有找到答案(優先級轉移),但這似乎適合,所以我會接受它:) – 2013-11-27 20:32:55

3

我們可以看到它的短文檔,有一個sprinf風格功能 https://github.com/mashpie/i18n-node 我認爲這將有助於你才達到你的目標

+0

嗨,原諒稍遲:)回覆。該工具似乎不適合該法案,因爲它使用了位置參數。 – 2013-01-23 10:59:11

相關問題