diff --git a/app/pages/settings.vue b/app/pages/settings.vue index 14d50e110..d048c50c1 100644 --- a/app/pages/settings.vue +++ b/app/pages/settings.vue @@ -4,7 +4,14 @@ const canGoBack = useCanGoBack() const { settings } = useSettings() const { locale, locales, setLocale: setNuxti18nLocale } = useI18n() const colorMode = useColorMode() -const { currentLocaleStatus, isSourceLocale } = useI18nStatus() +const { currentLocaleStatus, isSourceLocale, getLocaleStatus } = useI18nStatus() + +const localeItems = computed(() => + locales.value.map(loc => ({ + label: formatLocaleLabel(loc.name ?? '', getLocaleStatus(loc.code)), + value: loc.code, + })), +) // Escape to go back (but not when focused on form elements or modal is open) onKeyStroke( @@ -219,7 +226,7 @@ const setLocale: typeof setNuxti18nLocale = locale => { { + it('appends percentage when locale is partially translated', () => { + expect(formatLocaleLabel('Français', makeStatus(85))).toBe('Français (85%)') + }) + + it('appends percentage when locale is 0% translated', () => { + expect(formatLocaleLabel('العربية', makeStatus(0))).toBe('العربية (0%)') + }) + + it('does not append percentage when locale is 100% complete', () => { + expect(formatLocaleLabel('English (US)', makeStatus(100))).toBe('English (US)') + }) + + it('returns plain name when locale status is null', () => { + expect(formatLocaleLabel('English', null)).toBe('English') + }) +})