I’m using default Rails i18n and have got a problem with i18ing breadcrumbs. I use gem called “breadcrumbs_on_rails” to render breadcrumbs, so I add breadcrumbs-links in controllers like this:
add_breadcrumb I18n.t('interface.home'), :root_path
The problem is, that controller doesn’t seem to know about current locale and always uses default language.
How do I tell i18n to use selected locale, not default?
UPDATE:
Controllers know about current locale. But problem appears in strange circumstances. I used the same code in two different places in one method and found out, that i18n does not work on line 6 and works on line 10 of the following example code:
def index
@device = Device.find_by_id(params[:device_id])
if @device != nil
if current_user?(User.find(@device))
logger.debug I18n.locale # Outputs en - wrong
add_breadcrumb t('interface.all_events'), device_events_path(@device) # Does not work
logger.debug I18n.locale # Outputs de - correct
add_breadcrumb @device.title, device_path(@device)
logger.debug I18n.locale # Outputs de - correct
add_breadcrumb t('interface.all_events'), device_events_path(@device) # Works perfect
@events = @device.events.paginate(page: params[:page], per_page: 30)
else
redirect_to :root
end
else
redirect_to :root
end
end
Locale is set in application_controller.rb like was adviced in tutorial, but using http_accept_language for detection:
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
def default_url_options(options={})
I18n.locale = get_accepted_language
{ :locale => get_accepted_language }
end
def get_accepted_language
available_locales = %w{en de}
request.user_preferred_languages
request.preferred_language_from(available_locales)
end
end
URLs look like this: http://localhost:3000/de/devices/3/events
Get and set the current locale:
Get default locale:
Here is all you need:
http://guides.rubyonrails.org/i18n.html
Try to use approach from official guides. You can set locale using
before_filter: