【问题标题】:How to expire fragment cache when locale changes?区域设置更改时如何使片段缓存过期?
【发布时间】:2012-05-27 04:09:41
【问题描述】:

我正在尝试使用片段缓存来缓存使用 I18n 的 Ruby on Rails 站点上的页脚和导航栏。问题是,更改语言然后以错误的语言显示页脚和导航栏。当语言环境改变时,你如何处理过期的片段缓存?

【问题讨论】:

    标签: ruby-on-rails caching internationalization


    【解决方案1】:

    您应该将区域设置作为缓存键的一部分,而不是使片段缓存过期,例如

    cache :locale => I18n.locale, ... do
      ...
    end
    

    这样不同的用户可以看到页脚/导航栏的不同语言版本,但所有人都会看到缓存的版本。

    【讨论】:

    • 我知道我错过了一些就在我眼前而我正盯着看的东西! :) 谢谢!
    • 酷。 Ps 如果答案对您有帮助,您应该将答案标记为已接受,以帮助人们搜索相同的内容
    • 我最后写的是:footer_html_here
    【解决方案2】:

    在 Rails 3 中缓存片段时,这对我有用:

    - cache([object, locale: I18n.locale]) do
    

    【讨论】:

      【解决方案3】:

      我曾经有这个助手,所以我不需要将语言环境显式传递给每个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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-21
        • 2014-04-07
        • 2023-02-10
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 2015-03-11
        • 2023-04-02
        相关资源
        最近更新 更多