gpt4 book ai didi

javascript - 如何有条件地加载语言相关的 Javascript 文件

转载 作者:行者123 更新时间:2023-12-02 23:04:30 25 4
gpt4 key购买 nike

如何有条件地导出2个变量?

这些是语言标志使用的 2 个 Javascript 文件。

// text.fr.js
export const LOGIN_TITLE_fr = {
title: 'Hello!',
};

export const LOGIN_ERROR_fr = {
err_msg: 'Error!',
};

// text.en.js
export const LOGIN_TITLE_en = {
title: 'Hello!',
};

export const LOGIN_ERROR_en = {
err_msg: 'Error!',
};

这是用于有条件导入然后导出 2 个变量的文件,该文件将由此处未列出的另一个文件使用。

1)情况1:

// text1.js
// No compiler error, but for 'fr', LOGIN_TITLE, LOGIN_ERROR are still en. Why?
import { LOGIN_TITLE_en, LOGIN_ERROR_en } from './text.en.js';
import { LOGIN_TITLE_ch, LOGIN_ERROR_ch } from './text.fr.js';

const LOGIN_TITLE = LOGIN_TITLE_en;
const LOGIN_ERROR = LOGIN_ERROR_en;

if (window.loi_language == 'fr') {
const LOGIN_TITLE = LOGIN_TITLE_fr;
const LOGIN_ERROR = LOGIN_ERROR_fr;
}


export {
LOGIN_TITLE,
LOGIN_ERROR
}

2)案例2

// text2.js
// Error when loading at last line!!!
import { LOGIN_TITLE_en, LOGIN_ERROR_en } from './text.en.js';
import { LOGIN_TITLE_ch, LOGIN_ERROR_fr } from './text.fr.js';


if (window.loi_language == 'fr') {
const LOGIN_TITLE = LOGIN_TITLE_fr;
const LOGIN_ERROR = LOGIN_ERROR_fr;
} else {
const LOGIN_TITLE = LOGIN_TITLE_en;
const LOGIN_ERROR = LOGIN_ERROR_en;
}


export {
LOGIN_TITLE,
LOGIN_ERROR // Error: not defined.
}

尝试了以上2种情况,均无效。想知道导出 2 个变量的正确方法是什么取决于语言。

最佳答案

您正在const - 声明 block 作用域内的变量,它们不会影响模块作用域中的变量。您需要使用

let LOGIN_TITLE = LOGIN_TITLE_en;
let LOGIN_ERROR = LOGIN_ERROR_en;

if (window.loi_language == 'fr') {
LOGIN_TITLE = LOGIN_TITLE_fr;
LOGIN_ERROR = LOGIN_ERROR_fr;
}

但是我建议简化为

// text.fr.js
export const LOGIN_TITLE = 'Bonjour!';
export const LOGIN_ERROR = 'Défaut!';

// text.en.js
export const LOGIN_TITLE = 'Hello!';
export const LOGIN_ERROR = 'Error!';

// text.js
import * as en from './text.en.js';
import * as fr from './text.fr.js';

const dict = window.loi_language == 'fr' ? fr : en;

export const LOGIN_TITLE = dict.LOGIN_TITLE;
export const LOGIN_ERROR = dict.LOGIN_ERROR;

对导出使用相同的名称可能会在某些时候允许您将动态 text.js 替换为模块 bundler 中特定于语言的名称。

关于javascript - 如何有条件地加载语言相关的 Javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57648378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com