From 6d7a23eebb92ba799f657b25f5f3d6e8e4408db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Sanz=20Garc=C3=ADa?= <esanz-garcia@gitlab.com> Date: Wed, 31 Jan 2024 18:24:12 +0000 Subject: [PATCH] Default to English the language switcher Instead of crashing the language switcher componte when the cookie doesn't contain a `preferred_language`, now it defaults to English. Defensive programming. --- .../javascripts/language_switcher/components/app.vue | 4 ++-- app/assets/javascripts/language_switcher/constants.js | 6 ++++++ app/assets/javascripts/language_switcher/index.js | 10 ++++++---- spec/frontend/language_switcher/components/app_spec.js | 9 +++++---- spec/frontend/language_switcher/mock_data.js | 5 +---- 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/language_switcher/components/app.vue b/app/assets/javascripts/language_switcher/components/app.vue index f00290d0e466..22b0aeb98358 100644 --- a/app/assets/javascripts/language_switcher/components/app.vue +++ b/app/assets/javascripts/language_switcher/components/app.vue @@ -3,7 +3,7 @@ import { GlCollapsibleListbox, GlLink } from '@gitlab/ui'; import { __ } from '~/locale'; import { setCookie } from '~/lib/utils/common_utils'; import { helpPagePath } from '~/helpers/help_page_helper'; -import { PREFERRED_LANGUAGE_COOKIE_KEY } from '../constants'; +import { PREFERRED_LANGUAGE_COOKIE_KEY, EN } from '../constants'; const HELP_TRANSLATE_MSG = __('Help translate to your language'); const HELP_TRANSLATE_HREF = helpPagePath('/development/i18n/translation.md'); @@ -18,7 +18,7 @@ export default { default: [], }, preferredLocale: { - default: {}, + default: EN, }, }, data() { diff --git a/app/assets/javascripts/language_switcher/constants.js b/app/assets/javascripts/language_switcher/constants.js index b5c0613ac018..83f5d79510fe 100644 --- a/app/assets/javascripts/language_switcher/constants.js +++ b/app/assets/javascripts/language_switcher/constants.js @@ -1 +1,7 @@ export const PREFERRED_LANGUAGE_COOKIE_KEY = 'preferred_language'; + +export const EN = { + value: 'en', + // eslint-disable-next-line @gitlab/require-i18n-strings + text: 'English', +}; diff --git a/app/assets/javascripts/language_switcher/index.js b/app/assets/javascripts/language_switcher/index.js index b224e2510bbd..adb032701fb0 100644 --- a/app/assets/javascripts/language_switcher/index.js +++ b/app/assets/javascripts/language_switcher/index.js @@ -10,12 +10,14 @@ export const initLanguageSwitcher = () => { const preferredLangCode = getCookie(PREFERRED_LANGUAGE_COOKIE_KEY); const preferredLocale = locales.find((locale) => locale.value === preferredLangCode); + const provide = { locales }; + if (preferredLocale) { + provide.preferredLocale = preferredLocale; + } + return new Vue({ el, - provide: { - locales, - preferredLocale, - }, + provide, render(createElement) { return createElement(LanguageSwitcher); }, diff --git a/spec/frontend/language_switcher/components/app_spec.js b/spec/frontend/language_switcher/components/app_spec.js index 036ff55fef70..ca8c6c90bf12 100644 --- a/spec/frontend/language_switcher/components/app_spec.js +++ b/spec/frontend/language_switcher/components/app_spec.js @@ -1,9 +1,9 @@ import { GlLink } from '@gitlab/ui'; import { mountExtended } from 'helpers/vue_test_utils_helper'; import LanguageSwitcherApp from '~/language_switcher/components/app.vue'; -import { PREFERRED_LANGUAGE_COOKIE_KEY } from '~/language_switcher/constants'; +import { PREFERRED_LANGUAGE_COOKIE_KEY, EN } from '~/language_switcher/constants'; import * as utils from '~/lib/utils/common_utils'; -import { locales, ES, EN } from '../mock_data'; +import { locales, ES } from '../mock_data'; jest.mock('~/lib/utils/common_utils'); @@ -14,7 +14,6 @@ describe('<LanguageSwitcher />', () => { wrapper = mountExtended(LanguageSwitcherApp, { provide: { locales, - preferredLocale: EN, ...props, }, }); @@ -28,9 +27,11 @@ describe('<LanguageSwitcher />', () => { const findLanguageDropdownItem = (code) => wrapper.findByTestId(`language_switcher_lang_${code}`); const findFooter = () => wrapper.findByTestId('footer'); - it('preferred language', () => { + it('sets English as preferred language by default', () => { expect(getPreferredLanguage()).toBe(EN.text); + }); + it('sets preferred locale when provided', () => { createComponent({ preferredLocale: ES, }); diff --git a/spec/frontend/language_switcher/mock_data.js b/spec/frontend/language_switcher/mock_data.js index 548bddf01738..70bcb225fe38 100644 --- a/spec/frontend/language_switcher/mock_data.js +++ b/spec/frontend/language_switcher/mock_data.js @@ -1,7 +1,4 @@ -export const EN = { - value: 'en', - text: 'English', -}; +import { EN } from '~/language_switcher/constants'; export const ZH_CN = { value: 'zh_CN', -- GitLab