Why this doesn't work?
<%= link_to 'in english', :locale => 'en' if I18n.locale != 'en' %>
And how to make it work?
Why this doesn't work?
<%= link_to 'in english', :locale => 'en' if I18n.locale != 'en' %>
And how to make it work?
Why this doesn't work?
<%= link_to 'in english', :locale => 'en' if I18n.locale != 'en' %>
And how to make it work?
The answer to both is parentheses.
Walter
Walter Davis wrote in post #1049966:
Walter Davis wrote in post #1049966:
Why this doesn't work?
<%= link_to 'in english', :locale => 'en' if I18n.locale != 'en' %>
And how to make it work?
The answer to both is parentheses.
Walter
<%= link_to('in english', :locale => 'en') if (I18n.locale != 'en') %> ?
Doesn't work!
Then please define doesn't work. The former would throw a concatenation error. The new version does exactly what that you don't expect? Another hint -- what is the precise value of the locale (value AND format)?
Walter
Walter Davis wrote in post #1049973:
Walter
<%= link_to('in english', :locale => 'en') if (I18n.locale != 'en') %> ?
Doesn't work!
Then please define doesn't work.
Ok, this code:
<%= I18n.locale %> <%= link_to('in english', :locale => 'en') if (I18n.locale != 'en') %>
returns this html:
en <a href="/welcome/index?locale=en">in english</a>
Why? If I18n.locale == 'en' there should not be link.
So why "if (I18n.locale != 'en')" is true ?
Walter Davis wrote in post #1049973:
Walter
<%= link_to('in english', :locale => 'en') if (I18n.locale != 'en') %> ?
Doesn't work!
Then please define doesn't work.
Ok, this code:
<%= I18n.locale %> <%= link_to('in english', :locale => 'en') if (I18n.locale != 'en') %>
returns this html:
en <a href="/welcome/index?locale=en">in english</a>
Why? If I18n.locale == 'en' there should not be link.
So why "if (I18n.locale != 'en')" is true ?
Have you followed these steps:
I think that you're missing the part where you take the params[:locale] and do something with it.
Walter
Walter Davis wrote in post #1049976:
<a href="/welcome/index?locale=en">in english</a>
Why? If I18n.locale == 'en' there should not be link.
So why "if (I18n.locale != 'en')" is true ?
Have you followed these steps:
I made it like this:
class ApplicationController < ActionController::Base protect_from_forgery
before_filter :set_locale
def set_locale locale = params[:locale] || session[:locale] || extract_locale_from_accept_language_header if(locale.match /^(ru|en)$/) I18n.locale = locale session[:locale] = locale end end
private
def extract_locale_from_accept_language_header request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first end
end
Walter Davis wrote in post #1049976:
<a href="/welcome/index?locale=en">in english</a>
Why? If I18n.locale == 'en' there should not be link.
So why "if (I18n.locale != 'en')" is true ?
Have you followed these steps:
I made it like this:
class ApplicationController < ActionController::Base protect_from_forgery
before_filter :set_locale
def set_locale locale = params[:locale] || session[:locale] || extract_locale_from_accept_language_header if(locale.match /^(ru|en)$/) I18n.locale = locale session[:locale] = locale end end
private
def extract_locale_from_accept_language_header request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first end
end
----
And if <%= I18n.locale %> prints on page "en" so I18n.locale is set
Anything you print all by itself inside an erb block gets an implicit conversion to string. But a comparison or concatenation isn't going to do the same for you. 'en' != :en, for example. You could try <%= I18n.locale == 'en' ? 'true' : 'false' %> and compare what you get with <%= I18n.locale.to_s == 'en' ? 'true' : 'false' %> to see if this is your issue.
Walter
returns this html:
en <a href="/welcome/index?locale=en">in english</a>
Why? If I18n.locale == 'en' there should not be link.
So why "if (I18n.locale != 'en')" is true ?
I18n.locale is a symbol and :en is not == to 'en'
Fred