2013-09-10 5 views
0

У меня есть приложение Rails с использованием i18n. Это хорошо, пока я пытаюсь изменить application_helper.rb есть часть, которая стоит:application_helper.rb не обновляется после перезагрузки сервера Rails

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.

Так что я даже пытался CtrlC и rails s, несколько раз, не повезло.

+0

Вы можете проверить, являются ли эти локализованные файлы CSS на самом деле в вашей папке активов, и что они на самом деле включить контент, который должен содержать каждый? – zeantsoi

+0

Да, они на самом деле работают как шарм .. Мне просто нужно изменить lenguage по умолчанию, но на самом деле файлы есть, все загружаются –

+0

Как вы передаете аргумент 'language' вашей функции' language_css'? – zeantsoi

ответ

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 
+0

Спасибо, действительно, человек !, по умолчанию работает отлично с en.css сейчас, но я получаю эти отпечатки # {css_file} "вот так, так что никакой другой lenguage не работает, что мне не хватает для печати (эхо) с фактическим css –

+0

@MonchoChavez Это потому, что для интерполяции требуется строка с двойными кавычками. Обновленный ответ –

+0

Извините, что я настоящий новичок на рельсах, проблема в другом месте, даже если ваш код вставляет es.css и URL пока нет ничего, кроме домена, я думаю, im установил es-Mx по умолчанию в другой части кода somthing of i18n, damn, в application.rb. Я также установил это: config.i18n.default_locale = 'en'. im so lost –

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.

Смежные вопросы