| 
									
										
										
										
											2017-04-07 12:40:26 +02:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Localized | 
					
						
							|  |  |  |   extend ActiveSupport::Concern | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   included do | 
					
						
							| 
									
										
										
										
											2019-07-21 18:08:02 +02:00
										 |  |  |     around_action :set_locale | 
					
						
							| 
									
										
										
										
											2017-04-07 12:40:26 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-08 02:30:50 +02:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 12:40:26 +02:00
										 |  |  |   def set_locale | 
					
						
							| 
									
										
										
										
											2019-07-21 18:08:02 +02:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2017-04-07 12:40:26 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def default_locale | 
					
						
							| 
									
										
										
										
											2018-03-18 16:57:04 +01:00
										 |  |  |     if ENV['DEFAULT_LOCALE'].present? | 
					
						
							|  |  |  |       I18n.default_locale | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       request_locale || I18n.default_locale | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-06-10 16:44:02 +09:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def request_locale | 
					
						
							|  |  |  |     preferred_locale || compatible_locale | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def preferred_locale | 
					
						
							| 
									
										
										
										
											2018-04-21 01:14:31 +09:00
										 |  |  |     http_accept_language.preferred_language_from(available_locales) | 
					
						
							| 
									
										
										
										
											2017-06-10 16:44:02 +09:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def compatible_locale | 
					
						
							| 
									
										
										
										
											2018-04-21 01:14:31 +09:00
										 |  |  |     http_accept_language.compatible_language_from(available_locales) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def available_locales | 
					
						
							|  |  |  |     I18n.available_locales.reverse | 
					
						
							| 
									
										
										
										
											2017-04-14 19:12:39 -04:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-04-07 12:40:26 +02:00
										 |  |  | end |