2016-03-27 1 views
2

Я использую i18next с localstorage, чтобы изменить язык моего сайта (карта буклета с маркерами). У меня есть все языки в одном файле lang.js. Я хочу разбить его на несколько файлов, каждый для языка. Как я могу это сделать?Как изменить язык на несколько файлов вместо одного в i18next?

ссылка на файл языка на 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": "версия" 
     } 
    } 

ответ

2

Не уверен, что если вы все еще требуйте ответа на это, поэтому я просто поставлю это здесь, если кто-то еще столкнется с подобной проблемой.

То, что я сделал в подобной ситуации:

$(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! 
} 
+1

Удивительный! Это то, что я хотел отделить языковые файлы! Я проверю, когда приеду домой. Спасибо – RogerHN

+0

Пробовал это сейчас, я думаю, что я сделал что-то не так. Перевод не сработал. Файл должен быть: js/languages ​​/ en.json, если resGetPath - '/js/languages/__lng__.json'? Кроме того, файл должен начинаться следующим образом: '{ " перевод ": { " AddYourNote ":" Добавить примечание ",' – RogerHN