【发布时间】:2012-05-27 04:09:41
【问题描述】:
我正在尝试使用片段缓存来缓存使用 I18n 的 Ruby on Rails 站点上的页脚和导航栏。问题是,更改语言然后以错误的语言显示页脚和导航栏。当语言环境改变时,你如何处理过期的片段缓存?
【问题讨论】:
标签: ruby-on-rails caching internationalization
我正在尝试使用片段缓存来缓存使用 I18n 的 Ruby on Rails 站点上的页脚和导航栏。问题是,更改语言然后以错误的语言显示页脚和导航栏。当语言环境改变时,你如何处理过期的片段缓存?
【问题讨论】:
标签: ruby-on-rails caching internationalization
您应该将区域设置作为缓存键的一部分,而不是使片段缓存过期,例如
cache :locale => I18n.locale, ... do
...
end
这样不同的用户可以看到页脚/导航栏的不同语言版本,但所有人都会看到缓存的版本。
【讨论】:
在 Rails 3 中缓存片段时,这对我有用:
- cache([object, locale: I18n.locale]) do
【讨论】:
我曾经有这个助手,所以我不需要将语言环境显式传递给每个cache 调用:
# frozen_string_literal: true
module CacheHelper
# Always using current I18n.locale to cache things.
def cache(name = {}, options = {}, &block)
name_with_locale = [name].flatten << I18n.locale.to_s
super(name_with_locale, options, &block)
end
end
【讨论】: