4

現在時,如果我有我的應用程序一樣如何在rails中擴展I18n.translate方法?

<%= t :test %> 

一些代碼,沒有可翻譯爲:測試中,我得到這樣的事情在我看來:

<span class="translation_missing" title="translation missing: en.test">Test</span> 

我想即使對於現有的翻譯也要包括類似的跨度,所以如果翻譯存在,我想得到類似的東西:

<span class="translation_existing" title="translation existing: en.test">Translated string</span> 

注意th e跨度中的不同類名。而字符串應該是真正的翻譯。

如何通過重寫翻譯方法來實現此結果?

預先感謝您

Gnagno

回答

2

「T」是一個視圖助手: http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t

很容易查看其源代碼,並創建自己的,你也可以覆蓋通過在你的ApplicationHelper中重新定義它來幫助你。

但恕我直言,你不應該重新定義它,但創建一個不同的名稱你自己的。有很多情況下,如果你插入額外的HTML標記,你會在視圖的某些部分使用「t」助手,例如:我在頁面部分使用「t」助手來翻譯標題,meta標籤,等等)......

1

我創建了一個覆蓋「T」的方法,這只是快捷方式「翻譯」一個幫手:

def t(*a)   # I don't care what params go in 
    key = a.first  # just want to override behaviour based on the key 

    #if my overrides contain the key 
    if value = @i18n_overrides["#{I18n.locale}.#{key}"] 
    return value # return the overrided value 
    end 

    translate(*a) # otherwise letting i18n do its thing 
end 

更清潔的方法是這些,但他們沒有爲我工作:

嘗試使用別名,但認識到ttranslate不存在在該範圍內的執行點cl屁股身體。

嘗試呼叫ActionView::Helpers::TranslationHelper.translate而不是隻是translate但這也沒有工作。