我有一個幫助函數可以生成有用的HTML標記。我的功能通常用一些參數來調用,包括一些用I18n my_helper(t(:translation_symbol))
翻譯的文本。攔截和處理幫手中缺少的翻譯
我用那個的I18n t
翻譯幫手,它(如果保持不變)的文本輸出一些<span class="translation missing">...</span>
不用翻譯
我想知道如何以最佳方式「攔截」這個翻譯錯過了那麼
- 我可以在我的助手正確地呈現他們我的助手外
- 正常行爲
在我的意見,我應該能夠同時調用
<%= my_helper(t(:my_text)) %> # My helper needs to handle missing translations
<%= t(:my_text) %> # I want default I18n markup (or a custom one) '<span class="translation missing">fr.my_text</span>
我的助手
def my_helper(text=nil)
# Suppose my_text doesn't have a translation, text will have value
# => '<span class="translation-missing">fr.my_text</span>'
if translation_missing?(text)
# Code to handle missing translation
doSomething(remove_translation_missing_markup(text))
notify_translation_missing
else
doSomething(text)
end
end
def translation_missing?(text)
# Uses some regex pattern to detect '<span class="translation-missing">'
end
def remove_translation_missing_markup(text)
# Uses some regex pattern to extract my_text from '<span class="translation-missing">fr.my_text</span>'
end
有沒有更好的解決這個辦法嗎?我對使用髒正則表達式解決方案感到不滿。
編輯:額外的要求
- 的看法沒有額外的標記:我不想看着我的文件單獨添加
raise: true
或default: xxx
每一個翻譯。如果需要改變任何地方的行爲,我可以重寫t
方法。 - 在我的幫手中,如果找到翻譯,我需要一種方便的方式來操作翻譯的文本,但對於缺失的翻譯,我需要輕鬆地提取翻譯的完整路徑(
fr.namespace.translation_symbol
),而原始翻譯符號(translation_symbol
),所以我可以在自定義標記中添加自己translation_missing
。
EDIT2:我喜歡那個
- 覆蓋
t
幫手思考的東西rescue I18n::MissingTranslationData => e
- 如果引發異常,創建並返回
- 如果呈現的自定義對象一個html.erb,會輸出通常的
<span class="translation..."
- 有用字段(翻譯路徑,translation_str荷蘭國際集團),我可以在我的助手
- 如果呈現的自定義對象一個html.erb,會輸出通常的
你最終找到了一個解決方案,讓你得到你想要的東西嗎? –
@PaulFioravanti其實我對某些我認爲會相當酷的東西,但我不能在我的意見中得到最終的文本呈現爲HTML。看到[這個問題](http://stackoverflow.com/questions/36072697/custom-object-that-converts-to-html-in-view) –
好的,很酷。希望你最終得到你想要的工作。不過,我認爲我沒有在運行時處理丟失翻譯的想法,但我認爲如果它們對於您的應用程序來說足夠大,那麼您需要確保在您之前沒有丟失翻譯進行應用程序部署,這是[i18n-tasks](https://github.com/glebm/i18n-tasks)可以提供的幫助。 –