2013-03-08 33 views
1

我知道這看起來微不足道,但讓說,在Ruby on Rails的我有軌7.days人類可讀的字符串

document.expire_in = 7.days 

我怎麼能打印到期mesages的人類可讀的版本?

"Document will expire in #{document.expire_in}" 
=> Document will expire in 7 days 

或許真的與I18n.tI18n.l

這個作品的唯一方法的工作原理是

7.days.inspect => 「7天」

這是唯一的出路??

我看ActiveSupport::Duratio n和沒有看到一個答案

THX

+0

什麼是錯的'7.days.inspect'單位價值

document = Document.new document.expire_in = "7 days" document.translated_day 

? – alestanis 2013-03-08 17:04:11

+0

檢查是一種保留調試,但如果沒有別的我只會用它:) – equivalent8 2013-03-08 17:33:18

+0

是的,也是很高興有東西,(如我所說)可以與I18n翻譯所以恩「7天「,SVK」7 dni「... :) – equivalent8 2013-03-08 17:40:04

回答

2

因此,Rails中沒有內置的解決方案。我決定去與

7.days.inspect => "7 days" 

,後來,當項目將得到翻譯,我會用一些有意義然而,將這些轉換

我建議Robert`s評論一下這個問題擴展ActiveSupport::Duration 。我同意在數據庫中保存價值的解決方案,例如:「7天」以及從中做到的東西。像在翻譯文檔模型(或裝飾)

class Document < ActiveRecord::Base 
    #.... 

    def translated_day 
    timeline = expire_in.split(' ') 
    "#{timeline.first} #{I18n.t("timeline.${timeline.last}")}" 
    end 
    #.. 
end 


#config/locales/svk.yml 
svk: 
    timeline: 
    days: "dni" 
+0

'.minutes.inspect'和'.hours.inspect'在幾秒內產生結果。 – 2017-02-10 11:55:05

3

這不回答你的具體問題,但在我看來,你會過得更好設置日期時間是它將到期,然後利用distance_of_time_in_words

如果你總是隻說7天,那麼爲什麼不把它寫成一個硬編碼的字符串呢?

+0

是的,我同意這是一個很好的解決方案(+1),但是在我的情況下,我不想指定確切的日期和時間。把它想象成需要驗證的文件,並且當該文件將被驗證(下個月可能發生),然後計算7.days;所以我已經在數據庫中保留了''7 days'',從我解析到'7.days',所以我可以說例如:'Document.last.expiery_string#=>「7天」但如果將來我會介紹翻譯,我還想說'7.dni「(斯洛伐克語lang),」7 dagen「(德朗)... – equivalent8 2013-03-11 10:14:38

+1

如果是這樣的話,我會建議添加一列將持有單位和其他,我會指出單位大小。根據單位大小和編號使用翻譯保持不變。我可能不完全理解你的用例,但是這可以讓你有7天或1個月或其他任何東西。如果你想要1個月和4天,這當然會下降。這可能不是你的問題。希望這可以幫助。 – Robert 2013-03-11 14:26:31

相關問題