Add global locale param (#17464)
				
					
				
			- Remove the session-based locale stickyness
This commit is contained in:
		
							parent
							
								
									35850f8195
								
							
						
					
					
						commit
						85b86fe28c
					
				
					 2 changed files with 20 additions and 20 deletions
				
			
		|  | @ -7,27 +7,24 @@ module Localized | |||
|     around_action :set_locale | ||||
|   end | ||||
| 
 | ||||
|   def set_locale | ||||
|     locale   = current_user.locale if respond_to?(:user_signed_in?) && user_signed_in? | ||||
|     locale ||= session[:locale] ||= default_locale | ||||
|     locale   = default_locale unless I18n.available_locales.include?(locale.to_sym) | ||||
| 
 | ||||
|     I18n.with_locale(locale) do | ||||
|       yield | ||||
|     end | ||||
|   def set_locale(&block) | ||||
|     I18n.with_locale(requested_locale || I18n.default_locale, &block) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def default_locale | ||||
|     if ENV['DEFAULT_LOCALE'].present? | ||||
|       I18n.default_locale | ||||
|     else | ||||
|       request_locale || I18n.default_locale | ||||
|     end | ||||
|   def requested_locale | ||||
|     requested_locale_name   = available_locale_or_nil(params[:locale]) | ||||
|     requested_locale_name ||= available_locale_or_nil(current_user.locale) if respond_to?(:user_signed_in?) && user_signed_in? | ||||
|     requested_locale_name ||= http_accept_language if ENV['DEFAULT_LOCALE'].blank? | ||||
|     requested_locale_name | ||||
|   end | ||||
| 
 | ||||
|   def request_locale | ||||
|     http_accept_language.language_region_compatible_from(I18n.available_locales) | ||||
|   def http_accept_language | ||||
|     HttpAcceptLanguage::Parser.new(request.headers.fetch('Accept-Language')).language_region_compatible_from(I18n.available_locales) if request.headers.key?('Accept-Language') | ||||
|   end | ||||
| 
 | ||||
|   def available_locale_or_nil(locale_name) | ||||
|     locale_name.to_sym if locale_name.present? && I18n.available_locales.include?(locale_name.to_sym) | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -149,10 +149,14 @@ module Mastodon | |||
|       :'zh-TW', | ||||
|     ] | ||||
| 
 | ||||
|     config.i18n.default_locale = ENV['DEFAULT_LOCALE']&.to_sym | ||||
|     config.i18n.default_locale = begin | ||||
|       custom_default_locale = ENV['DEFAULT_LOCALE']&.to_sym | ||||
| 
 | ||||
|     unless config.i18n.available_locales.include?(config.i18n.default_locale) | ||||
|       config.i18n.default_locale = :en | ||||
|       if config.i18n.available_locales.include?(custom_default_locale) | ||||
|         custom_default_locale | ||||
|       else | ||||
|         :en | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') | ||||
|  | @ -169,7 +173,6 @@ module Mastodon | |||
|       Doorkeeper::Application.send :include, ApplicationExtension | ||||
|       Doorkeeper::AccessToken.send :include, AccessTokenExtension | ||||
|       Devise::FailureApp.send :include, AbstractController::Callbacks | ||||
|       Devise::FailureApp.send :include, HttpAcceptLanguage::EasyAccess | ||||
|       Devise::FailureApp.send :include, Localized | ||||
|     end | ||||
|   end | ||||
|  |  | |||
		Reference in a new issue