i18next简体中文和繁体中文失效,但是英语有效

前提

我没有使用npm,不清楚在npm是否是相同的问题,但是你也可以尝试着看,应该大差不大,如果你的npm项目也通过这文章解决了,请在评论区评论一下,到时候这行前提可以删除了。

这里用的是https://cdnjs.cloudflare.com/ajax/libs/i18next/22.4.5/i18next.min.js 这种网页可以直接嵌入的js script

解决方案

翻译语言名不使用"-”。若必须要带"-”字符,则"-”后边跟随的必须都是大写的。

例如你不可以使用zh-tw,但是你可以使用zhtw或者zh-TW,问题是由"-”导致的。

表格里是测试可行性的语言名的字符格式组合,可以之为参考。

语言名

(随意字符串,无需按真实存在的国家或语言名来)

有效
cn
healkjdlkfjaljdklf
zh
zh-tw

zh-TW

zh-Tw
zh>tw
zh>Tw
zh>tW
cn除了" ' -外的符号基本 ✅

题外话,我发现其他符号多半是可以的,例如 . > ? = ~ [] 甚至;这个符号,除了英语" '这种html本身就带识别的,我是真想不明白为什么-不行,这种标准zh-cn zh-tw zh-hk大家不都是一直用的吗?刚想阴谋论说这个i18next作者坏话,想起了en-US en-UK这回事,发现可行,又尝试了en-us en-uk,发现不可行,所以没有区别对待,所以各位放心用,就单纯的"-”跟的内容必须大写,毕竟这个可以是任意的语言名(但需注意"-”符号的使用前提)。


发现问题并解决的过程

例如我的网页html,本意是想写一个多语言的domain for sale页面,但是通过ChatGPT生成的HTML,只有英语有效,并且通过切换其他语言的时候调试显示的是找不到。

<!DOCTYPE html>
<html lang="zh-tw">
<head>
    <meta charset="UTF-8">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/22.4.5/i18next.min.js"></script>
</head>
<body>
    <button onclick="changeLang('zh-tw')">繁體中文</button>
    <button onclick="changeLang('en')">English</button>
    <button onclick="changeLang('zh-cn')">简体中文</button>

    <h1 id="title"></h1>
    <p id="desc"></p>

    <script>
        const resources = {
            "zh-tw": {
                translation: {
                    "title": "🏆 MCU.hk – 絕佳的電子與嵌入式領域域名!",
                    "desc": "💡 3 字母簡短域名,適合電子、MCU、物聯網等領域!"
                }
            },
            "en": {
                translation: {
                    "title": "🏆 MCU.hk – The Ultimate Domain for Electronics & Embedded Industry!",
                    "desc": "💡 3-letter premium domain ideal for Electronics, MCU, and IoT industries!"
                }
            },
            "zh-cn": {
                translation: {
                    "title": "🏆 MCU.hk —— 电子与嵌入式领域的顶级域名!",
                    "desc": "💡 3 字母超短域名,适用于电子、MCU、物联网等行业!"
                }
            }
        };

        i18next.init({
            lng: "zh-tw",
            resources
        }, function(err, t) {
            updateContent();
        });

        function updateContent() {
            document.getElementById("title").innerText = i18next.t("title");
            document.getElementById("desc").innerText = i18next.t("desc");
        }

        function changeLang(lang) {
            i18next.changeLanguage(lang, updateContent);
        }
    </script>
</body>
</html>

既然显示找不到,我就复制了en,新增名en1,同时在翻译文件里添加了中文,发现可行!

那么问题只能出在这个翻译名上了,所以我就尝试了删除了最为容易导致发生错的符号,于是解决了此问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值