如何将语言更改为多个文件,而不是i18next中的一个文件

How do I change the language to multiple files instead of one in i18next?

本文关键字:文件 i18next 一个 语言      更新时间:2023-09-26

我正在使用带有localstorage的i18next来更改我的网站语言(带有标记的传单地图)。我把所有的语言都放在一个名为lang.js的文件中。我想把它分成多个文件,每个文件对应一种语言。我该怎么做?

github上语言文件的链接:https://github.com/hurtworldmap/hurtworldmap.github.io/blob/master/raw/lang.js

我的功能:

$(document).ready(function() {
    var language = "en";
    if (localStorage.getItem("language") != null)
        language = localStorage.getItem("language");
    i18n.init({
        lng: language,
        resStore: resources,
        fallbackLng: "en"
    }, function(o) {
        $(document).i18n()
    }), $(".lang").click(function() {
        var o = $(this).attr("data-lang");
        localStorage.setItem("language", o);
        i18n.init({
            lng: o
        }, function(o) {
            $(document).i18n()
        })
    })
});

语言示例(在同一文件中):

"ru": {
        "translation": {
            "locations": "Локации",
            "showlocations": "Показать локации",
            "animals": "Животные",
            "shigi": "Шиги",
            "shigiwolf": "Дикий Шиги",
            "shigiforest": "Лесной Шиги",
            "shigiarctic": "Арктический Шиги",
            "bor": "Кабан",
            "radbor": "Радиоактивный Кабан",
            "tokar": "Токар",
            "tokarblue": "Синий Токар",
            "tokarparrot": "Токар-попугай",
            "sasquatch": "Снежный",
            "yeti": "Йети",
            "plants": "Растения",
            "owrong": "Апельсин",
            "pitcherplant": "Кувшинка",
            "succulentseeds": "семена Succulent",
            "items": "Вещи",
            "itemflint": "Кремень",
            "itemwood": "Дерево",
            "lootcrate": "Ящик",
            "resources": "Ресурсы",
            "woodlog": "Бревно",
            "coal": "Уголь",
            "limestone": "Известняк/Глина",
            "flint": "Кремень/Камень",
            "deadtree": "Мертвое дерево",
            "ores": "Руды",
            "ironore": "Железная руда",
            "titranium": "Титраниумная руда",
            "mondinium": "Мондиниумная руда",
            "ultranium": "Ультраниумная руда",
            "largerock": "Большой камень",
            "valley" : "Valley",
            "fortress": "Fortress",
            "transit": "Transit",
            "boonies": "Boonies",
            "crossroad": "Crossroad",
            "airfield": "Airfield",
            "carrier": "Carrier",
            "dome": "Dome",
            "arch": "Arch",
            "created": "Создано:",
            "names": "RogerHN и LuisMika",
            "legal": "Hurtworld и логотипы Hurtworld являются тварными знаками Bankroll Studios",
            "website": "Официальный сайт игры",
            "welcome": "Это первая версия карты.",
            "welcome2": "Если вы нашли баг, то пожалуйста пришли его в наш пост на ",
            "welcome3": "Reddit'e или в группу ВК.",
            "settings": "настройки",
            "languagechange": "Изменить язык",
            "translationbr": "Португальский Бразильский перевод RogerHN",
            "translationru": "Перевод на русский от Roofy",
            "translationde": "Перевод на Немецкий от Valixx",
            "translationcn": "Перевод на китайский от Smoke6",
            "translationpl": "Польский перевод от Magiczna Huśtawka",
            "translationro": "Румынский перевод от Blaconix",
            "translationtr": "турецкий перевод от Vinerra",
            "translationit": "Итальянский перевод от CHC",
            "translationes": "Испанский перевод Yoje",
            "version": "версия"
        }
    }

不确定您是否仍然需要答案,所以我将把它放在这里,以防其他人面临类似的问题。

我在类似情况下所做的是:

$(document).ready(function() {
    var language = "en";
    if (localStorage.getItem("language") != null)
        language = localStorage.getItem("language");
    i18n.init({
        lng: language,
        resGetPath: '/languages/__lng__.min.json',
        fallbackLng: "en"
    }, function(o) {
        $(document).i18n()
    }), $(".lang").click(function() {
        var o = $(this).attr("data-lang");
        localStorage.setItem("language", o);
        i18n.init({
            lng: o
        }, function(o) {
            $(document).i18n()
        })
    })
});

这为您提供了每种语言的文件,您可以从文件中删除语言密钥:

{
    "translation": {
         "help": "Help Me!
    }
}

如果你有多个名称空间,你也可以使用为每个名称空间使用一个文件

resGetPath: "/languages/__lng__/__ns__.min.json"

然后,文件/languages/en/translation.min.json应该不包含命名空间的密钥,如下所示:

{
     "help": "Help Me!
}