jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用i18n-ized Rails 3.2 app中的timeago jQuery插件替换time_ago_in_words大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通过 Rails Best Practices运行我完成的Rails Tutorial应用程序让我向 not use the time_ago_in_words method发出警告,“计算服务器端的时间太贵了”,因此他们提供了一些示例代码来更改您的实现以使用 timeago jQuery plugin.听起来像它会使有趣的变化,所以我试了一下.我使用time_ago_in_words的原始代码分为两个地方:

应用程序/视图/共享/ _Feed_item.html.haml

# ...
%span.timestamp
  = t('.time_posted_ago',time: time_ago_in_words(Feed_item.created_at) )

应用程序/视图/微柱/ _micropost.html.haml

# ...
%span.timestamp
  = t('.time_posted_ago',time: time_ago_in_words(micropost.created_at))

我使用HTML5时间标记代码更改为使用timeago,如下所示:

应用程序/视图/共享/ _Feed_item.html.haml

# ...
%time.timeago{ datetiR_63_11845@e: Feed_item.created_at.getutc.iso8601 }
  = t('.time_posted_ago',time: Feed_item.created_at.to_s)

应用程序/视图/微柱/ _micropost.html.haml

# ...
%time.timeago{ datetiR_63_11845@e: micropost.created_at.getutc.iso8601 }
  = t('.time_posted_ago',time: micropost.created_at.to_s)

我想,只留下我将timeago()方法添加到我的coffeescript文件中:

应用程序/资产/ JavaScript的/ application.js.coffee

$(document).ready ->
  $("time.timeago").timeago()

这不起作用,所以我尝试将语句移动到microposts.js.coffee和users.js.coffee,包含和不包含$(document).ready – >但仍然没有去.然后我想也许在jquery-rails中认不包含timeago所需的库,所以我添加了它们:

应用程序/资产/ JavaScript的/ application.js.coffee

//= require jquery
//= require jquery_ujs
//= require jquery.min
//= require jquery.timeago
//= require bootstrap
//= require_tree .

在这里添加jquery.min.js和jquery.timeago.js声明不起作用,我也假设我的语法已关闭,因为它们破坏了依赖于javascript的其他页面元素.

所以,据我所知,我认为我的haml文件中的实现代码是正确的,但我只是不知道:

>在哪个coffeescript文件中我应该放入$(“time.timeago”).timeago()调用以及如果我有什么不正确我应该写它
> timeago库是否包含在rails-jquery中
>如果他们不是,如何正确地包括它们

花了很多时间在这之后,我最终尝试了rails-timeago宝石,除了有一些好帮手之外,确实有时间正确显示.但是,它似乎与上面的rails t()方法实现不太匹配,以便只是在单词中@L_607_33@时间然后将其插入到i18n字符串中.

那么,如何使用带有i18n的Rails 3.2应用程序中的timeago JQuery插件获得time_ago_in_words的预期效果

解决方法

我设法使用 rails-timeago gem破解了一个解决方案.它不是最佳的,但它似乎获得了理想的timeago效果,这是相当不错的.我想知道如何使用 timeago jQuery plugin和%time.timeago标记在Rails中获得相同的效果.无论如何,希望这对某人感兴趣.

建立

的Gemfile

gem 'rails-timeago','1.3.0'

配置/初始化/ timeago.rb

Rails::Timeago.default_options limit: proc { 20.days.ago },nojs: true
Rails::Timeago.locales = [:en,:it,:ja]

创建app / assets / javascripts / locales目录以将自定义设置放入timeago i18n字符串.为了完整起见,我从jQuery-timeago Github repository@L_607_33@了我想要的三个语言环境,并将它们放在目录下,但实际上只是更改了ja语言环境文件.

应用程序/资产/ JavaScript的/ application.js.coffee

# ...
//= require jquery
//= require jquery_ujs
//= require rails-timeago

应用程序/视图/布局/ application.html.haml

# ...
%head
  # ...
  = javascript_include_tag "application"
  = timeago_script_tag

履行

应用程序/视图/微柱/ _micropost.html.haml

# ...
%span.timestamp
  = t('.time_posted_prefix')
  %time<
    = timeago_tag(micropost.created_at)
    = t('.time_posted_suffix')

app / views / shared / _Feed_item.html.haml的代码是相同的:只需将micropost替换为Feed_item即可.

国际化

配置/语言环境/ en.yml

@H_925_9@microposts: micropost: time_posted_prefix: Posted time_posted_suffix: ""

配置/语言环境/ it.yml

@H_925_9@microposts: micropost: time_posted_prefix: Pubblicato time_posted_suffix: ""

配置/语言环境/ ja.yml

@H_925_9@microposts: micropost: time_posted_prefix: "" time_posted_suffix: に投稿された.

i18n文件中shared.Feed_item的字符串是相同的.

我找不到一种方法来使用t()动态地使用timeago_tag的结果(例如t(‘.time_posted_ago’,time:timeago_tag(micropost.created_at))),所以我将结果放在前缀和后缀之间. timeago提供与时间相关的前缀/后缀,但不提供与“发布”相关的前缀/后缀,因此上面添加了它们.
为了摆脱timeago_tag和time_posted_suffix(特别是日语)的输出间的空间,我将这两个标签包装在%time<标签与<这是一件小事,但这对我来说很烦人,所以我想把它放进去,但如果你没有使用需要time_posted_suffix键值的语言,那就没有必要了.我也假设有更好的方法来做到这一点. 问题 我最初在app / assets / javascripts / locales目录下有jquery.timeago.en.js,jquery.timeago.it.js和jquery.timeago.ja.js,但我有一个en文件没有的问题为en语言环境加载;相反,目录中按字母顺序排列的最后一个文件(即ja)将与en语言环境一起使用.所以,我将en文件重命名为jquery.timeago.xx.js,它显示了英文.我尝试将en文件移动到locales目录之外,但它似乎永远不会被拾取,因此它变成了xx. 更新 我遇到的i18n问题现在已经解决了.有关详细信息,请参见this Github issue.总之,我摆脱了我的app / assets / javascripts / locales目录,只放了jquery.timeago.ja.js,这是我真正想要自定义的唯一文件,位于lib / assets / javascripts / locales目录下,这意味着:它和:en locales,timeago的认翻译被使用,并且:翻译按预期显示.所以,我确实得到了我认为使用Rails-timeago gem解决这个问题的好方法.

更新2

解决方案目前在本地工作,但由于资产预编译问题,无法正确部署到Heroku …

更新3

找到一个似乎在本地和Heroku工作的配置解决方案:

配置/初始化/ timeago.rb

Rails::Timeago.default_options limit: proc { 20.days.ago },:ja]
Rails::Timeago.map_locale "en","jquery.timeago.js"  # default
Rails::Timeago.map_locale "it","locales/jquery.timeago.it.js"  # default
Rails::Timeago.map_locale "ja","timeago/jquery.timeago.ja.js"  # customized

配置/环境/ production.rb

# ...
config.assets.precompile += %w( jquery.timeago.js locales/jquery.timeago.it.js timeago/jquery.timeago.ja.js )

而且,在这种情况下,唯一需要的自定义文件是app / assets / javascripts / timeago / jquery.timeago.ja.js

更多细节可以在related Github issue找到.

大佬总结

以上是大佬教程为你收集整理的用i18n-ized Rails 3.2 app中的timeago jQuery插件替换time_ago_in_words全部内容,希望文章能够帮你解决用i18n-ized Rails 3.2 app中的timeago jQuery插件替换time_ago_in_words所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。