diff --git a/app/controllers/concerns/preferred_language_switcher.rb b/app/controllers/concerns/preferred_language_switcher.rb index 5ac75e40b0402288345bb66a39ed2b213c667769..872652100c9b84f0317fcd245f9883edce4f1b44 100644 --- a/app/controllers/concerns/preferred_language_switcher.rb +++ b/app/controllers/concerns/preferred_language_switcher.rb @@ -2,8 +2,6 @@ module PreferredLanguageSwitcher extend ActiveSupport::Concern - include Gitlab::Utils::StrongMemoize - include PreferredLanguageSwitcherHelper private @@ -13,36 +11,8 @@ def init_preferred_language def preferred_language cookies[:preferred_language].presence_in(Gitlab::I18n.available_locales) || - selectable_language(marketing_site_language) || - selectable_language(browser_languages) || Gitlab::CurrentSettings.default_preferred_language end - - def selectable_language(language_options) - language_options.find { |lan| ordered_selectable_locales_codes.include?(lan) } - end - - def browser_languages - http_language_header = request.env['HTTP_ACCEPT_LANGUAGE'] - return [] unless http_language_header - - http_language_header.tr!('-', '_').split(%r{[;,]}).reject { |str| str.start_with?('q') } - end - strong_memoize_attr :browser_languages - - def marketing_site_language - return [] unless params[:glm_source] - - locale = params[:glm_source].scan(%r{(\w{2})-(\w{2})/}).flatten - - return [] if locale.empty? - - [locale[0], "#{locale[0]}_#{locale[1]}"] - end - - def ordered_selectable_locales_codes - ordered_selectable_locales.map { |locale| locale[:value] } # rubocop:disable Rails/Pluck - end end PreferredLanguageSwitcher.prepend_mod diff --git a/spec/controllers/concerns/preferred_language_switcher_spec.rb b/spec/controllers/concerns/preferred_language_switcher_spec.rb index 1cec62a5f3439f77c476d7d043b95116f1578ba7..40d6ac10c379ced95f4e82ca151acaacd495c7c9 100644 --- a/spec/controllers/concerns/preferred_language_switcher_spec.rb +++ b/spec/controllers/concerns/preferred_language_switcher_spec.rb @@ -14,52 +14,13 @@ def new end context 'when first visit' do - let(:glm_source) { 'about.gitlab.com' } - let(:accept_language_header) { nil } - before do - request.env['HTTP_ACCEPT_LANGUAGE'] = accept_language_header.dup - - get :new, params: { glm_source: glm_source } + get :new end it 'sets preferred_language to default' do expect(cookies[:preferred_language]).to eq Gitlab::CurrentSettings.default_preferred_language end - - context 'when language param is valid' do - let(:glm_source) { 'about.gitlab.com/fr-fr/' } - - it 'sets preferred_language accordingly' do - expect(cookies[:preferred_language]).to eq 'fr' - end - - context 'when language param is invalid' do - let(:glm_source) { 'about.gitlab.com/ko-ko/' } - - it 'sets preferred_language to default' do - expect(cookies[:preferred_language]).to eq Gitlab::CurrentSettings.default_preferred_language - end - end - end - - context 'when browser preferred language is not english' do - context 'with selectable language' do - let(:accept_language_header) { 'zh-CN,zh;q=0.8,zh-TW;q=0.7' } - - it 'sets preferred_language accordingly' do - expect(cookies[:preferred_language]).to eq 'zh_CN' - end - end - - context 'with unselectable language' do - let(:accept_language_header) { 'nl-NL;q=0.8' } - - it 'sets preferred_language to default' do - expect(cookies[:preferred_language]).to eq Gitlab::CurrentSettings.default_preferred_language - end - end - end end context 'when preferred language in cookies has been modified' do