【问题标题】:ReactJS - How to create a fallback language function with localeStorageReactJS - 如何使用 localeStorage 创建后备语言函数
【发布时间】:2020-12-18 17:22:50
【问题描述】:

我在决定如何处理我的语言应用时遇到了一些问题。正如您在下面看到的,我使用“window.localStorage.setItem(LOCAL_STORAGE_KEY, locale);”获取浏览器的语言环境。我有两种语言es和en。但是当某人使用另一种不是 es 或 en 的语言时,例如当它检测到具有语言环境继承的语言时:“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;
}

【问题讨论】:

    标签: javascript reactjs internationalization local-storage linguijs


    【解决方案1】:

    我不熟悉您正在使用的库,但这可以吗?

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2011-04-11
      • 1970-01-01
      • 2022-12-29
      相关资源
      最近更新 更多