{"_id":"@daniil203/i18n","_rev":"7-2cef727a2226f7ff985eec50d76d61ab","name":"@daniil203/i18n","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.0":{"name":"@daniil203/i18n","version":"1.0.0","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.0","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"8a273427b824527e6402bab656c6b20f16dba598","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.0.tgz","fileCount":7,"integrity":"sha512-sj/e6Wt2n/AwE8ryI0zmJpfJBUyEFODx5mqY4favdqPowdkO7ao1/aO2Ldqz0CoRXF5fecduUSCnkX/uP9//DQ==","signatures":[{"sig":"MEQCICfZSFeLFFTOuxzfTxhY8imLR4Gyxd/njriSuOE38NdtAiAqTnFBUhLcNAav37RIGEbtZk7LaRQ5Oteo7Wc3An5iJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8761},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.0_1745575142683_0.6738230984997908","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@daniil203/i18n","version":"1.0.1","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.1","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"198fcab3ace710dcc4bf310ffbd81f4eeb68b4b0","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.1.tgz","fileCount":7,"integrity":"sha512-L0QjSYnVlfsCereCxW+VY1vczuRa4xNE0PJOVbXAxeIwl9HZw2DdQXgoWrsVtxiGJ4JQgEUUlq/YQjECIukRkw==","signatures":[{"sig":"MEQCIDZImt33962x5ov+TWiVfQRiiJXb8CguNRsHvtSIjH7JAiAblsAXae0kDU5rKj5nwi4w7J3t0lNOHxKqmPKTelGQlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15744},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.1_1745581509185_0.6976962508448077","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@daniil203/i18n","version":"1.0.2","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.2","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"a98a3e9b2a9f89764a3fc698ee5d9c1d72af40d1","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.2.tgz","fileCount":7,"integrity":"sha512-4Oq4xPzQF8cTa+T2BqcrnZLD87P14YJpJqSQozjYYW+EUG8kOUM0nH5B/hFOgAANIAuRy5/QmHZ+tY8iXrUDDg==","signatures":[{"sig":"MEQCIBNaB6SY380cQawUeJ54V+0GcIpv4MC1Vw/YHOo9IBfeAiBzCjpdHXYq+tJsxnPoLG0Hujw5Xg2k4OjdRSw5EWr+7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17120},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.2_1745582491215_0.032117698469684264","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@daniil203/i18n","version":"1.0.3","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.3","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"e6a69b7f1bb9ee4763d710383f0062b3a8700fe9","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.3.tgz","fileCount":7,"integrity":"sha512-BwZd2bFzQ7ljEgL6/kkRii48mlpRHRsj99ISbzoyIaXJ85ognk7xeSBlGHbwMhxik3yhLl3RcfGOxPVMjM4pvw==","signatures":[{"sig":"MEYCIQCVfPQmPZ5QRenZ1UfrEmBshXiDIrmYoK6jFpUCdjxb5wIhAJqQDtXPzwxPJGORoanxXl2nKJt0CiYXhBZ35rIac0Zu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17120},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.3_1745582739915_0.09266979589063573","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@daniil203/i18n","version":"1.0.4","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.4","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"cbf8bfc5e9421eb6d9023cad1720c3ce6566f98f","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.4.tgz","fileCount":7,"integrity":"sha512-Hfz6Moqtug1YkuUP8Ro4e+CSOMUuDS4q0BTDyXXcFnktcBG5jGtbZafRyo9tOhqFDNZT+39BC3cDfMWWLc/ODA==","signatures":[{"sig":"MEYCIQD/cfJIgje1T0SpOTJXqqu4RknZtIp8ZpKlxc6iTiBd7QIhANOXUFjtMCGgVtR8lkIkiPy/8tKmZL8awb6U2ax5+P3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17069},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.4_1745666531837_0.04949539527944924","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@daniil203/i18n","version":"1.0.5","keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","_id":"@daniil203/i18n@1.0.5","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"dist":{"shasum":"14982e8758a2993af54dbf458fbb4711518ee2f1","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.5.tgz","fileCount":7,"integrity":"sha512-0Y8bxowibLqljHIW5IkXs53/oi+D7FVof5Aa3ICLnxcae9xx087z4rY3PJx68XhCkcyHP6CsvtUa+kuNQv11sQ==","signatures":[{"sig":"MEYCIQCxB7WoRsGgqwCoHFvigYgFslJwxb+BScdxj6cvnEIBdgIhANV4ZNgXBIUK25AAxhDBKegWdtZ7hv0bxgCxlq6wMus7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19571},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"_npmVersion":"10.8.2","description":"A simple and lightweight i18n library for JavaScript and TypeScript","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/i18n_1.0.5_1745668893155_0.9386309236900887","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@daniil203/i18n","version":"1.0.6","description":"A simple and lightweight i18n library for JavaScript and TypeScript","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build"},"keywords":["i18n","translation","localization","internationalization","typescript"],"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","devDependencies":{"typescript":"^5.8.3"},"_id":"@daniil203/i18n@1.0.6","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XbDxAaAtGzYqwpV4BArUrT4/yEn3hziF2eWG0Va9ZXgwVp2tOheaiPW4PqlS+yh1+Kxjxr8rR8Ep+r+Osdq9VA==","shasum":"38b8a765067abcfc648b739cf23311fdd8d5818e","tarball":"https://registry.npmjs.org/@daniil203/i18n/-/i18n-1.0.6.tgz","fileCount":7,"unpackedSize":24582,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCVIEYbPNyLRaTKR6YfpjsYi4RrYbeiohr/9vJaSX28owIgOMldBvjmjhan4wafDlve9/YifOgDm4piBGjE95R4j4U="}]},"_npmUser":{"name":"dangreart","email":"daniilgrecko12@gmail.com"},"directories":{},"maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/i18n_1.0.6_1746609324576_0.25483465230299407"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-25T09:59:02.587Z","modified":"2025-05-07T09:15:24.947Z","1.0.0":"2025-04-25T09:59:02.854Z","1.0.1":"2025-04-25T11:45:09.413Z","1.0.2":"2025-04-25T12:01:31.416Z","1.0.3":"2025-04-25T12:05:40.094Z","1.0.4":"2025-04-26T11:22:12.046Z","1.0.5":"2025-04-26T12:01:33.350Z","1.0.6":"2025-05-07T09:15:24.751Z"},"author":{"name":"Daniil Grechko","email":"daniilgrecko12@gmail.com"},"license":"MIT","keywords":["i18n","translation","localization","internationalization","typescript"],"description":"A simple and lightweight i18n library for JavaScript and TypeScript","maintainers":[{"name":"dangreart","email":"daniilgrecko12@gmail.com"}],"readme":"## Установка\r\n\r\nДля установки библиотеки используйте команду:\r\n\r\n```bash\r\nnpm install @daniil203/i18n\r\n```\r\n\r\n## Использование\r\n1. Импорт библиотеки и создание экземпляра\r\n\r\nПосле установки, чтобы начать использовать библиотеку, создайте экземпляр I18n, передав в него объект с настройками, включая переводы, активный язык и язык для записи.\r\n```bash\r\n// i18n/index.ts\r\nimport { I18n } from \"@daniil203/i18n\";\r\nimport * as translations from \"./translations\";  // Импортируйте ваши переводы\r\n\r\nexport const i18n = new I18n({\r\n    translations,\r\n    activeLang: \"ru\",  // Язык, на который будет происходить перевод\r\n    writeLang: \"ru\"    // Язык, на котором пишутся исходные строки\r\n});\r\n```\r\n2. Формирование файлов локализации\r\n\r\nФайлы локализации — это объекты, где ключами являются строки, которые будут переведены, а значениями — переводы для различных языков.\r\n\r\n## Пример структуры файла локализации:\r\n```bash\r\n// translations/ru.json\r\n{\r\n    \"Привет\": \"Привет\",\r\n    \"Hello\": \"Привет\",\r\n}\r\n\r\n// translations/en.json\r\n{\r\n    \"Привет\": \"Hello\",\r\n    \"Hello\": \"Hello\",\r\n}\r\n\r\n// translations/kk.json\r\n{} \r\n// В файле должен быть пустой объект либо заполненный переводами\r\n// нельзя файл оставлять пустым или массивом [] - вызовится ошибка типов\r\n```\r\n\r\n## Пример структуры экспорта файлов локализации:\r\n```bash\r\n// translations/index.ts\r\nimport be from \"./be.json\";\r\nimport en from \"./en.json\";\r\nimport kk from \"./kk.json\";\r\nimport pl from \"./pl.json\";\r\nimport ru from \"./ru.json\";\r\nimport uz from \"./uz.json\";\r\nexport { be, en, kk, pl, ru, uz };\r\n```\r\n3. Перевод текста\r\n\r\nДля перевода текста используйте метод t. Он позволяет переводить строки, основываясь на текущем активном языке.\r\n```bash\r\nimport { i18n } from './i18n';\r\n\r\nconst greeting = i18n.t(\"Привет\");  // Получаем перевод строки \"Привет\" на текущий активный язык\r\nconsole.log(greeting);  // Выведет \"Hello\" (если активный язык \"en\")\r\n// Если вы передаёте в метод текст на языке отличном что указан в writeLang, то нужно передавать второй параметр\r\n\r\nconst greeting = i18n.t(\"Hello\", \"en\");\r\nconsole.log(greeting); // Выведет \"Привет\" (если активный язык \"ru\")\r\n```\r\nЕсли перевод для активного языка отсутствует, метод вернет исходный текст или текст на языке записи.\r\n\r\n4. Изменение активного языка\r\n\r\nВы можете изменить активный язык, используя метод setActiveLang.\r\n```bash\r\ni18n.setActiveLang(\"en\");  // Устанавливаем активный язык как английский\r\n```\r\nТеперь все переводы, получаемые через t, будут возвращать строки на английском языке.\r\n\r\n5. Получение всех переводов\r\n\r\nЧтобы получить все переводы для всех языков, используйте метод getAllTranslations.\r\n```bash\r\nconst allTranslations = i18n.getAllTranslations();\r\nconsole.log(allTranslations);  // Выведет все переводы для всех языков\r\n```\r\n6. Получение списка доступных языков\r\n\r\nДля получения списка всех поддерживаемых языков, используйте метод getLangs.\r\n```bash\r\nconst langs = i18n.getLangs();\r\nconsole.log(langs);  // Вернет список языков, например: [\"ru\", \"en\"]\r\n```\r\n\r\n7. Подписка на изменения языка\r\n\r\nМетод subscribe позволяет подписать функцию, которая будет вызвана при изменении активного языка. Это полезно, если вы хотите, чтобы ваше приложение обновляло интерфейс при смене языка.\r\n\r\n```bash\r\nconst unsubscribe = i18n.subscribe(() => {\r\n    console.log(\"Язык изменился на\", i18n.activeLang);\r\n});\r\n\r\n// Чтобы отписаться от изменений, вызовите returned функцию\r\nunsubscribe();\r\n```\r\nЭтот метод добавляет слушателя, который будет оповещён каждый раз, когда активный язык изменится. Возвращаемая функция позволяет отписаться от уведомлений.\r\n\r\n## Как передавать локализацию\r\n\r\nДля передачи локализации в библиотеку создайте файл с переводами, как показано выше.\r\n\r\nИмпортируйте локализацию в вашем приложении.\r\n\r\nПередайте объект с переводами в экземпляр класса I18n.\r\n\r\nПример передачи локализации:\r\n```bash\r\n// i18n/index.ts\r\nimport { I18n } from \"@daniil203/i18n\";\r\nimport * as translations from \"./translations\";\r\n\r\nexport const i18n = new I18n({\r\n    translations,\r\n    activeLang: \"ru\",\r\n    writeLang: \"ru\"\r\n});\r\n\r\ni18n.t(\"Привет\") // Выведет \"Привет\"\r\ni18n.t(\"Hello\", \"en\") // Выведет \"Привет\"\r\n\r\ni18n.setActiveLang(\"en\")\r\n\r\ni18n.t(\"Привет\") // Выведет \"Hello\"\r\ni18n.t(\"Hello\", \"en\") // Выведет \"Hello\"\r\n```\r\n\r\n## Использование в React\r\n\r\nДля интеграции библиотеки с вашим React-приложением можно создать хук, который будет подписываться на изменения активного языка и инициировать перерисовку компонента при изменении языка.\r\n\r\nШаг 1: Создание экземпляра I18n\r\nИмпортируйте класс I18n, создайте экземпляр и передайте настройки для переводов, активного языка и языка записи.\r\n\r\n\r\n```bash\r\nimport { I18n } from \"@daniil203/i18n\";\r\nimport * as translations from \"src/i18n/translations\"; // Импорт ваших переводов\r\n\r\nexport const i18n = new I18n({\r\n    translations,\r\n    activeLang: \"ru\",  // Установите активный язык\r\n    writeLang: \"ru\",   // Язык для записи исходных строк\r\n});\r\n```\r\nШаг 2: Создание хука useI18n\r\n\r\nСоздайте хук, который будет возвращать функцию перевода. Этот хук подписывается на изменения активного языка, чтобы перерисовывать компонент при изменении языка.\r\n\r\n```bash\r\nimport { useEffect, useState } from \"react\";\r\nimport { i18n } from \"src/i18n\";  // Экземпляр i18n\r\n\r\nexport function useI18n() {\r\n    const [, forceRender] = useState(0);\r\n\r\n    // Подписываемся на изменения активного языка\r\n    useEffect(() => {\r\n        const unsubscribe = i18n.subscribe(() => {\r\n            forceRender((n) => n + 1); // Перерисовываем компонент\r\n        });\r\n\r\n        return () => {\r\n            unsubscribe(); // Отписка при размонтировании компонента\r\n        };\r\n    }, []);\r\n\r\n    return i18n.t.bind(i18n); // Возвращаем метод перевода\r\n}\r\n```\r\nШаг 3: Использование хука в компонентах\r\n\r\nТеперь вы можете использовать хук useI18n в вашем компоненте, чтобы получать переводы строк на активном языке.\r\n\r\n```bash\r\nimport React from \"react\";\r\nimport { useI18n } from \"./i18n\"; // Импортируйте хук\r\n\r\nconst MyComponent = () => {\r\n    const t = useI18n(); // Получаем функцию для перевода\r\n\r\n    return (\r\n        <div>\r\n            <h1>{t(\"Привет\")}</h1>  {/* Перевод текста \"Привет\" на активный язык */}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default MyComponent;\r\n```\r\nШаг 4: Изменение активного языка\r\nДля изменения активного языка используйте метод setActiveLang. Например, для переключения на английский язык:\r\n\r\n```bash\r\ni18n.setActiveLang(\"en\");  // Устанавливаем активный язык как английский\r\n```\r\n## Примечание\r\n\r\nВсе компоненты, использующие хук useI18n, будут автоматически перерисовываться при изменении активного языка, благодаря подписке на изменения в экземпляре I18n.\r\n\r\nВы можете использовать метод t для перевода строк на любой язык, указанного в вашем объекте локализаций.\r\n\r\nТаким образом, библиотека позволяет вам динамически изменять язык интерфейса в вашем React-приложении и получать переводы с минимальными усилиями.\r\n\r\n## Связь\r\nЕсли у вас возникли вопросы, предложения или вы нашли баг — пишите мне в Telegram:\r\nhttps://t.me/daniilgrechko\r\n\r\nБуду рад помочь!","readmeFilename":"README.md"}