From 720c8d0e357b2867b9c0fec27006caec3fed0b23 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 8 May 2013 22:28:41 +0100 Subject: [PATCH] Improve locale selection for Potlatch 2 and iD --- app/controllers/application_controller.rb | 41 +++++++++++++---------- app/views/site/_id.html.erb | 2 +- app/views/site/_potlatch2.html.erb | 2 +- app/views/site/id.html.erb | 2 +- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d541eba22..004db5f84 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -288,39 +288,44 @@ class ApplicationController < ActionController::Base def set_locale response.header['Vary'] = 'Accept-Language' - if @user - if !@user.languages.empty? - request.user_preferred_languages = @user.languages - response.header['Vary'] = '*' - elsif !request.user_preferred_languages.empty? - @user.languages = request.user_preferred_languages - @user.save - end + if @user && !@user.languages.empty? + request.user_preferred_languages = @user.languages + response.header['Vary'] = '*' + end + + I18n.locale = select_locale + + if @user && @user.languages.empty? && !request.user_preferred_languages.empty? + @user.languages = request.user_preferred_languages + @user.save end - if request.compatible_language_from(I18n.available_locales).nil? + response.headers['Content-Language'] = I18n.locale.to_s + end + + def select_locale(locales = I18n.available_locales) + if params[:locale] + request.user_preferred_languages = [ params[:locale] ] + end + + if request.compatible_language_from(locales).nil? request.user_preferred_languages = request.user_preferred_languages.collect do |pl| pls = [ pl ] while pl.match(/^(.*)-[^-]+$/) - pls.push($1) if I18n.available_locales.include?($1.to_sym) + pls.push($1) if locales.include?($1) or locales.include?($1.to_sym) pl = $1 end pls end.flatten - - if @user and not request.compatible_language_from(I18n.available_locales).nil? - @user.languages = request.user_preferred_languages - @user.save - end end - I18n.locale = params[:locale] || request.compatible_language_from(I18n.available_locales) || I18n.default_locale - - response.headers['Content-Language'] = I18n.locale.to_s + request.compatible_language_from(locales) || I18n.default_locale end + helper_method :select_locale + def api_call_handle_error begin yield diff --git a/app/views/site/_id.html.erb b/app/views/site/_id.html.erb index fe9d569aa..e2f783731 100644 --- a/app/views/site/_id.html.erb +++ b/app/views/site/_id.html.erb @@ -19,7 +19,7 @@ hash = '#map=' + (coord.zoom || 17) + '/' + coord.lon + '/' + coord.lat } - $('#id-embed').attr('src', '<%= id_url %>' + hash); + $('#id-embed').attr('src', '<%= id_url :locale => params[:locale] %>' + hash); <% else %> diff --git a/app/views/site/_potlatch2.html.erb b/app/views/site/_potlatch2.html.erb index 65ca9210e..0c0a85972 100644 --- a/app/views/site/_potlatch2.html.erb +++ b/app/views/site/_potlatch2.html.erb @@ -10,7 +10,7 @@ <% end %> -<% locale = request.compatible_language_from(Potlatch2::LOCALES.keys) || "en" %> +<% locale = select_locale(Potlatch2::LOCALES.keys) %>