在玉

2015-09-25 82 views
0

我試圖用玉做一些字符串插值+國際化在玉

強制串插我寫了一個自定義標籤

mixin unsubscribe 
    a(title='unsubscribe_link', href='#{target_address}/', 
    target='_blank', style='color:#00b2e2;text-decoration:none;') 
    = __("Click here") 

然後我得到了以下工作

p 
    | #[+unsubscribe] to unsubscribe 

但是,爲了支持i18n,我還想將整個字符串包裝到一個轉換塊中,函數的調用方式爲__()

但是,當我將字符串包裝在代碼塊中時,它不再呈現自定義標籤。

p 
    | #{__("#[+unsubscribe] to unsubscribe")} 

p 
    = __("#[+unsubscribe] to unsubscribe") 

將直接輸出[+unsubscribe] to unsubscribe。有沒有辦法強制從函數返回的字符串?

編輯1

正如已經指出的那樣,嵌套"Click here"並沒有真正意義的,因爲它會創建單獨的字符串。

我的這一切真正的目標是創建一個可以將傳遞給翻譯服務的簡化文本字符串:那麼理想

它應該是:

"#[+unsubscribe('Click here')] to unsubscribe"

,我會得到回到

"Klicken Sie #[+unsubscribe hier] um Ihr auszutragen"

我給這家的理由是,因爲使用的東西升ike gettext將按照確切的字符串匹配,我想抽象出標籤背後的所有邏輯。

+0

您已包裝'__(「點擊此處」)'。你只應該傳遞簡單的字符串給i18n函數。傳遞整塊玉石沒有意義。在完成所有函數調用(包括i18n轉換)之後,渲染整個jade字符串(至html)始終是最後一步。 – laggingreflex

+0

@laggingreflex你是對的,我實際上想要「點擊這裏」內聯,以便它顯示爲一個內聯字符串(我將修復我的示例)。傳遞純文本的問題在於,它創建了幾個字符串,這些字符串隨後會出現在翻譯器的上下文之外。 – paulpdaniels

回答

2

你真的想達到什麼是這樣的:

<p> 
    <a href='the link' title='it should also be translated!' 
    target='_blank' class='classes are better'>Click here</a> to unsubscribe 
</p> 

而且你不想要在翻譯標籤某種原因。好吧,不幸的是,將'點擊此處'與'取消訂閱'分開會導致某些語言的翻譯不正確 - 譯者需要一個上下文。所以最好使用標籤。

順便說一句:像__('Click here')這樣的東西不允許根據上下文對字符串進行不同的翻譯。我不知道你使用的是什麼翻譯工具,但它肯定應該使用標識符而不是英文文本。

讓我們回到你原來的問題,我相信你可以使用參數化mixin的做到這一點:

mixin unsubscribe(title, target_address, click_here, to_unsubscribe) 
    a(title=title, href=target_address, target='_blank', style='color:#00b2e2;text-decoration:none;')= click_here 
    span= to_unsubscribe 

這當然會導致額外的<span>標籤,它仍然沒有解決真正的問題(分離「點擊這裏「從」到取消訂閱「),沒有辦法重新排序這個句子,但是......我猜想唯一有效的選擇是將插值內置到翻譯引擎中並寫出非轉義標籤。否則,您需要重新設計頁面以避免句子內的鏈接。

+0

我的目標可能太模糊了。你是對的,點擊這裏不應該在自定義標籤。理想情況下,我想通過如下方式傳遞:'「[+取消訂閱點擊這裏]給unsubscrbe」'給翻譯員,這樣我就可以回到''Klicken Sie [+ unsubscribe hier] uh ihr auszutragen「'。由於替換是完全匹配的,我想最大限度地減少查找失敗,因爲鏈接的細節發生了變化。 – paulpdaniels