【问题标题】:rails 7.days to human readable stringrails 7.days 到人类可读的字符串
【发布时间】:2013-03-08 17:00:10
【问题描述】:

我知道这看起来微不足道,但可以说在 Ruby on Rails 中我有

document.expire_in = 7.days

如何打印到期信息的人类可读版本?

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

可能适用于I18n.tI18n.l

唯一可行的方法是

7.days.inspect => “7 天”

这是唯一的方法吗??

我正在查看ActiveSupport::Duration 并没有看到答案

谢谢

【问题讨论】:

  • 7.days.inspect 有什么问题?
  • inspect 是为调试保留的,但如果没有别的我就用它:)
  • 是的,如果有一些可以用 I18n 翻译的东西(就像我说的那样)那就太好了,所以 En "7 days", SVK "7 dni" ... :)跨度>
  • 如果您总是想以天为单位打印时差,您可以使用自制的解决方案来计算天数,然后将其传递给 I18n.t
  • 是的,同意,我只是想知道 Rails 中是否已经直接存在一些东西,所以我不会尝试重新发明轮子 :) ..但是无论如何都想提供帮助

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

这不能回答您的具体问题,但在我看来,您最好设置它过期的日期时间,然后利用distance_of_time_in_words

如果你总是简单地说 7 天,那为什么不直接写成硬编码字符串呢?

【讨论】:

  • 是的,我同意这是一个很好的解决方案(+1),但是在我的情况下,我不想指定确切的日期和时间。将其想象为需要验证的文档,以及该文档何时被验证(可能在下个月发生),然后计算 7.days;所以我已经在数据库中保存了"7 days",我正在解析到7.days,所以是的,我可以说例如:Document.last.expiery_string #=> "7 days",但如果我以后要介绍翻译,我还想说@987654325 @ (斯洛伐克语), "7 dagen" (德语) ...
  • 如果是这种情况,我建议添加一列来保存单位,另一列我会指出单位大小。根据单位大小使用翻译,数量保持不变。我可能不完全理解您的用例,但这将允许您有 7 天或 1 个月或其他任何时间。如果您想要 1 个月零 4 天,这当然会下降。在您的情况下,这可能不是问题。希望这会有所帮助。
【解决方案2】:

因此,Rails 中没有内置解决方案。我决定去

7.days.inspect => "7 days"

稍后,当项目将被翻译时,我将扩展 ActiveSupport::Duration 并添加一些有意义的东西来翻译这些

不过,我建议您查看 Robert 的 cmets 来回答这个问题。我同意在数据库中保持价值的解决方案,例如:“7 天”,然后做一些事情。喜欢翻译单位值

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

document.translated_day

在文档模型(或装饰器)中

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"

【讨论】:

  • .minutes.inspect.hours.inspect 在几秒钟内产生结果。
【解决方案3】:

这是一个使用 ActiveSupport::Duration#parts 演示 i18n 解决方案的示例

duration.parts.map { |unit, n| I18n.t unit, count: n, scope: 'duration' }.to_sentence

它可以使用以下本地化:

en:
  duration:
    years:
      one: "%{count} year"
      other: "%{count} years"
    months:
      one: "%{count} month"
      other: "%{count} months"
    weeks:
      one: "%{count} week"
      other: "%{count} weeks"
    days:
      one: "%{count} day"
      other: "%{count} days"
    hours:
      one: "%{count} hour"
      other: "%{count} hours"
    minutes:
      one: "%{count} minute"
      other: "%{count} minutes"
    seconds:
      one: "%{count} second"
      other: "%{count} seconds"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2012-03-31
    • 2017-07-07
    相关资源
    最近更新 更多