Skip to content

Commit

Permalink
fix(lang): respect fallback languages
Browse files Browse the repository at this point in the history
If `navigator.languages` returns `['da', 'en-US', 'en']`, and the Danish
language is not available, the user interface should be in English.

Currently it is shown in Norwegian, because only `'da'` is taken into
account when deciding on the preferred language (and `match` selects
`nb-NO` using the default `'best fit'` algorithm).

While the Norwegian and Danish languages are similar, I would argue that
this is a bug, as `navigator.languages` cleary states that the fallback
language should be English.

Another potential solution would be to pass `{ algorithm: 'lookup' }` to
the `match` function. However, this might break some cases when a
`'best fit'` approach would be appropriate (e.g. Swiss German falling
back to German).

See https://helvede.net/@jwcph/113497955274343365.
  • Loading branch information
sorin-davidoi committed Nov 18, 2024
1 parent 06b56a8 commit a78dbaf
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/utils/lang.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { i18n } from '@lingui/core';
import {
detect,
fromNavigator,
fromStorage,
fromUrl,
multipleDetect,
} from '@lingui/detect-locale';
import Locale from 'intl-locale-textinfo-polyfill';

Expand Down Expand Up @@ -54,15 +54,16 @@ export async function activateLang(lang) {
}

export function initActivateLang() {
const lang = detect(
const languages = multipleDetect(
fromUrl('lang'),
fromStorage('lang'),
fromNavigator(),
PHANPY_DEFAULT_LANG,
DEFAULT_LANG,
);
const matchedLang =
ALL_LOCALES.find((l) => l === lang) || localeMatch(lang, ALL_LOCALES);
languages.find((l) => ALL_LOCALES.includes(l)) ||
localeMatch(languages, ALL_LOCALES);
activateLang(matchedLang);

// const yes = confirm(t`Reload to apply language setting?`);
Expand Down

0 comments on commit a78dbaf

Please # to comment.