ReactJS - 如何使用 localeStorage 创建后备语言函数
ReactJS - How to create a fallback language function with localeStorage
我在决定如何使用我的语言应用程序时遇到了一些问题。正如您在下面看到的,我使用“window.localStorage.setItem(LOCAL_STORAGE_KEY, locale);”获取浏览器的语言环境。我有两种语言 es 和 en。但是当某人使用另一种不是 es 或 en 的语言时,例如当它检测到具有语言环境继承的语言时 ex: "es-ES"
(在此处传递:(/imports/cuadds/both/locales/${locale}/messages
))我收到如下错误:
Error: Cannot find module '/imports/cuadds/both/locales/es-ES/messages'
如何创建一个函数,在找不到语言时将区域设置默认设置为 en 或 es?
import { i18n } from "@lingui/core";
import { detect, fromStorage, fromNavigator } from "@lingui/detect-locale";
import { en, es } from "make-plural/plurals";
let isActivated;
const startupI18n = () => {
if (isActivated) return;
isActivated = true;
i18n.loadLocaleData({
en: { plurals: en },
es: { plurals: es },
});
dynamicActivate(getLocale());
};
export default startupI18n;
const LOCAL_STORAGE_KEY = "lang";
// defines where the locale falls back to (passed to dynamicActivate)
const DEFAULT_LOCALE = "es";
/**
* Load messages for requested locale and activate it.
*/
export async function dynamicActivate(locale) {
try {
const module = await import(`/imports/cuadds/both/locales/${locale}/messages`);
i18n.load(locale, module.messages);
i18n.activate(locale);
// saves the language to the localStorage
window.localStorage.setItem(LOCAL_STORAGE_KEY, locale);
} catch (error) {
console.log(error);
}
};
function getLocale() {
const detectedLocale = detect(
fromStorage("LOCAL_STORAGE_KEY"),
fromNavigator(),
DEFAULT_LOCALE,
);
return detectedLocale;
}
我不熟悉您使用的库,但这行得通吗?
function getLocale() {
const detectedLocale = detect(
fromStorage("LOCAL_STORAGE_KEY"),
fromNavigator(),
DEFAULT_LOCALE,
);
// if detectedLocale is 'en' or 'es' return
if (['en', 'es'].indexOf(detectedLocale) >= 0) {
return detectedLocale
}
// else return default value
return DEFAULT_LOCALE;
}
我在决定如何使用我的语言应用程序时遇到了一些问题。正如您在下面看到的,我使用“window.localStorage.setItem(LOCAL_STORAGE_KEY, locale);”获取浏览器的语言环境。我有两种语言 es 和 en。但是当某人使用另一种不是 es 或 en 的语言时,例如当它检测到具有语言环境继承的语言时 ex: "es-ES"
(在此处传递:(/imports/cuadds/both/locales/${locale}/messages
))我收到如下错误:
Error: Cannot find module '/imports/cuadds/both/locales/es-ES/messages'
如何创建一个函数,在找不到语言时将区域设置默认设置为 en 或 es?
import { i18n } from "@lingui/core";
import { detect, fromStorage, fromNavigator } from "@lingui/detect-locale";
import { en, es } from "make-plural/plurals";
let isActivated;
const startupI18n = () => {
if (isActivated) return;
isActivated = true;
i18n.loadLocaleData({
en: { plurals: en },
es: { plurals: es },
});
dynamicActivate(getLocale());
};
export default startupI18n;
const LOCAL_STORAGE_KEY = "lang";
// defines where the locale falls back to (passed to dynamicActivate)
const DEFAULT_LOCALE = "es";
/**
* Load messages for requested locale and activate it.
*/
export async function dynamicActivate(locale) {
try {
const module = await import(`/imports/cuadds/both/locales/${locale}/messages`);
i18n.load(locale, module.messages);
i18n.activate(locale);
// saves the language to the localStorage
window.localStorage.setItem(LOCAL_STORAGE_KEY, locale);
} catch (error) {
console.log(error);
}
};
function getLocale() {
const detectedLocale = detect(
fromStorage("LOCAL_STORAGE_KEY"),
fromNavigator(),
DEFAULT_LOCALE,
);
return detectedLocale;
}
我不熟悉您使用的库,但这行得通吗?
function getLocale() {
const detectedLocale = detect(
fromStorage("LOCAL_STORAGE_KEY"),
fromNavigator(),
DEFAULT_LOCALE,
);
// if detectedLocale is 'en' or 'es' return
if (['en', 'es'].indexOf(detectedLocale) >= 0) {
return detectedLocale
}
// else return default value
return DEFAULT_LOCALE;
}