Joh*_*976 9 ruby-on-rails liquid ruby-on-rails-5
在我的Rails 5应用程序中,我使用Liquid让我的用户生成内容.
根据我的用户输入,我使用以下内容初始化我的模板:
string = "Order {{ order.id }} was created {{ order.date | date: '%A %d/%m-%Y' }}"
template = Liquid::Template.parse(string)
result = template.render({'order' => {'id' => '123', 'date' => order.date}})
Run Code Online (Sandbox Code Playgroud)
这将打印一些la:
'Order 123 was created Sunday 14/01-2018'
Run Code Online (Sandbox Code Playgroud)
但是如何在我的Rails应用程序中构建Liquid日期本地化?
它似乎在文档中不受支持.然而,Shopify本身似乎已经在他们的Liquid实现中构建了本地化.
我想我需要通过我的模板语言环境(en,fr,等)和区域文件.我的Rails语言环境文件如下所示:
en:
datetime: &datetime
month_names:
[~, January, February, March, April, May, June, July, August, September, October, November, December]
day_names:
[Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
abbr_day_names:
[~, Sun, Mon, Thue, Wed, Thu, Fri, Sat]
formats:
default: "%d/%m/%Y"
long: "%A %d/%m-%Y"
Run Code Online (Sandbox Code Playgroud)
我称之为:
l(order.date, :format => :long, :locale => 'en')
Run Code Online (Sandbox Code Playgroud)
我很乐意在Liquid模板中访问类似的日期本地化.
我最终使用了@Ben证明的链接,并写下了这个解决方案:
# config/initializers/liquid_filters.rb
module I18nFilters
def l(date, format)
I18n.l(date, :format => format.to_sym)
end
end
Liquid::Template.register_filter(I18nFilters)
Run Code Online (Sandbox Code Playgroud)
现在,当调用这个新方法时:
{{ order.date | l: 'long' }}
Run Code Online (Sandbox Code Playgroud)
它会打印出:
'Sunday 14/01-2018'
Run Code Online (Sandbox Code Playgroud)
是语言环境文件Sunday中的任何内容。day_names
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |