我有一个使用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
。
所以我甚至尝试了 Ctrl C 和rails s
几次,没有运气。
答案 0 :(得分: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
答案 1 :(得分: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.css
重命名为es-mx.css
。