簡體   English   中英

Rails常用字符串(用於通知和錯誤消息等)

[英]Rails commonly used strings (for notices and error messages and the like)

大約一年前,我決定確保每個具有非唯一文本的flash通知都會從模塊中的方法獲取文本。 我這樣做的最初原因是為了避免反復輸入相同的字符串。 如果我想改變措辭,我可以在一個地方輕松地做到這一點,並且錯綜復雜地反復重復相同事情的可能性會降低。

我最終得到的是:

module Messages
    def format_error_messages(errors)
        errors.map {|attribute, message| "Error: #{attribute.to_s.titleize} #{message}.<br />"}
    end

    def error_message_could_not_find(object_name)
        "Error: Unable to find the specified " + object_name + "!"
    end

    def error_message_could_not_create(object_name)
        "Error: Unable to create the " + object_name + "!"
    end

    def error_message_could_not_save(object_name)
        "Error: Unable to save " + object_name + " to database!"
    end

    def error_message_could_not_update(object_name)
        "Error: Unable to update " + object_name + "!"
    end

    def error_message_could_not_destory(object_name)
        "Error: Unable to destroy " + object_name + "!"
    end

    def notice_message_created(object_name)
        object_name.capitalize + " has been created!"
    end

    def notice_message_updated(object_name)
        object_name.capitalize + " has been updated!"
    end

    def notice_message_destroyed(object_name)
        object_name.capitalize + " has been deleted!"
    end
end

在我的控制器中,當我設置閃光燈時,我可以執行以下操作:

flash[:notice] = notice_message_created("post")

這樣所有成功創建的對象都會生成類似的消息

我現在正在重做我的一個項目並且正在完成所有這些,我有這種嘮叨的感覺,這不是最好的方法。 我的意思是,它有效,到目前為止它對我有好處,但我從未見過其他人這樣做,我開始認為這是有原因的。 每次我需要一個新字符串時都必須添加一個新方法,這看起來幾乎是愚蠢的。 但那么我怎樣才能將上下文文本插入到字符串中(就像我們正在處理的對象類型的名稱一樣)?

在處理常見的文本字符串時,是否存在Rails社區標准? 特別是那些需要在運行時插入其他文本的人?

我一直在閱讀Rails的國際化,因為將我的項目本地化為多種語言會很好,我喜歡將所有文本字符串放在漂亮的YAML文件中,這樣可以一舉兩得。 但我不知道我怎么能做到這一點,並保持我已經擁有和需要的相同功能(除非我非常錯誤,我不需要它,因為有更好的方法)。

我對這個問題的任何想法,建議或相關閱讀都很開放。

您可以使用Rails Internationalization API作為替代方法。 然后,您可以使用要使用的字符串填充您的語言環境文件。 您可以包含您想要提供的任何參數,就像教程中的示例ins部分4.2一樣。

I18n.backend.store_translations :en, :thanks => 'Thanks %{name}!'
I18n.translate :thanks, :name => 'Jeremy'
# => 'Thanks Jeremy!'

請執行以下步驟:

  1. 訪問文件config/locales/en.yml

  2. 插入您的本地化:

    EN:已創建:“#{name}已創建!”

  3. 調用而不是notice_message_created(object_name)t(:created, object_name.capitalize)

最后,一切都應該像以前一樣工作,你已經擺脫了很多簡單的方法,並且你可以通過包含語言環境和將語言環境文件添加到config/locales來使你的應用程序國際化。

我肯定會選擇I18N。 但是,它需要一些努力,比如查找需要翻譯的所有字符串,並且大多數情況下,為您的翻譯文件提供了一個良好的結構。

Rails I18N支持插值 ,因此如果您需要在字符串中插入一個不會有問題的數字或名稱。

或者我是否誤解了“相同功能”的含義?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM