0

我有一个使用 i18n 的 Rails 应用程序。没关系,直到我尝试修改 application_helper.rb 有一部分是:

 def language_css(language)

    case language
      when 'en'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'
      when 'es-MX'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
      when 'fr'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/fr.css">'
      when 'jp'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/jp.css">'
      when 'ch'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ch.css">'
      when 'ar'
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
      default
        return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
    end
  end

我试图更改默认值"es.css""en.css"但我看不到任何更改。该es.css文件仍然是默认的 css 文件,而不是en.css.

所以我什至尝试CtrlCrails s几次,但没有运气。

4

2 回答 2

2

重新加载没有问题,您的case陈述根本没有按照您的想法进行。default这是一个方法调用,而不是关键字。你正在寻找else. 适当缩进,这变得很清楚:

case language
when 'en'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'

# Skipping some cases because they’re not needed for the example

when 'ar'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
  default
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
end

如我们所见,when 'ar'案例的第二行和第三行永远不会到达,因为它总是返回。你反而想要else

case language
when 'en'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/en.css">'

# Skipping some cases because they’re not needed for the example

when 'ar'
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/ar.css">'
else
  return raw '<link rel="stylesheet" type="text/css" href="/assets/stylesheets/es.css">'
end

您的代码最终可以更简单地编写为:

def language_css(language)
  css_file = {
    'en' => 'en.css',
    'es-MX' => 'es.css',
    'fr' => 'fr.css',
    'jp' => 'jp.css',
    'ch' => 'ch.css',
    'ar' => 'ar.css',
  }.fetch(language, 'es.css')

  raw %(<link rel="stylesheet" type="text/css" href="/assets/stylesheets/#{css_file}">)
end
于 2013-09-10T01:36:01.287 回答
0

我想知道您是否只是缺少代码中的错误。我会完全重写你的方法。

def language_css(language)
  asset = language.downcase

  return raw stylesheet_link_tag(asset) if Rails.application.assets.find_asset("#{asset}.css").present?

  raw stylesheet_link_tag('es')
end

您需要重命名es.csses-mx.css.

于 2013-09-10T01:29:46.503 回答