Improve locale selection for Potlatch 2 and iD

This commit is contained in:
Tom Hughes 2013-05-08 22:28:41 +01:00
parent a7e67846a7
commit 720c8d0e35
4 changed files with 26 additions and 21 deletions

View file

@ -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
if request.compatible_language_from(I18n.available_locales).nil?
I18n.locale = select_locale
if @user && @user.languages.empty? && !request.user_preferred_languages.empty?
@user.languages = request.user_preferred_languages
@user.save
end
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

View file

@ -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);
</script>
<% else %>
<script type="text/javascript">alert("<%= t 'site.edit.id_not_configured' %>")</script>

View file

@ -10,7 +10,7 @@
<script type="text/javascript">alert("<%= t 'site.edit.potlatch2_not_configured' %>")</script>
<% end %>
<% locale = request.compatible_language_from(Potlatch2::LOCALES.keys) || "en" %>
<% locale = select_locale(Potlatch2::LOCALES.keys) %>
<script type="text/javascript" defer="defer">
var changesaved=true;

View file

@ -16,7 +16,7 @@
'Please upgrade your browser or use Potlatch 2 to edit the map.';
document.getElementById('id-container').className = 'unsupported';
} else {
<% locale = request.compatible_language_from(ID::LOCALES) || "en" %>
<% locale = select_locale(ID::LOCALES) %>
var id = iD()
.embed(true)