@dayanulanov/i18n-light 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +145 -0
  2. package/package.json +1 -1
package/README.md ADDED
@@ -0,0 +1,145 @@
1
+ # @dayanulanov/i18n-light
2
+
3
+ ![npm bundle size](https://img.shields.io/bundlephobia/minzip/@dayanulanov/i18n-light?label=size&color=success)
4
+ ![npm version](https://img.shields.io/npm/v/@dayanulanov/i18n-light)
5
+ ![npm downloads](https://img.shields.io/npm/dm/@dayanulanov/i18n-light)
6
+ ![license](https://img.shields.io/npm/l/@dayanulanov/i18n-light)
7
+
8
+ **Ultra-lightweight** (< 400 bytes gzipped) и **полностью типобезопасная** библиотека интернационализации (i18n) для JavaScript/TypeScript. Без зависимостей. Без лишнего.
9
+
10
+ ## Особенности
11
+
12
+ - 🪶 **Нано-размер**: менее 1 КБ в minified + gzip виде
13
+ - 🛡️ **Типобезопасность**
14
+ - Автодополнение ключей перевода
15
+ - Проверка ключей на этапе компиляции
16
+ - 🚀 **Ноль зависимостей**
17
+ - Работает в Browser Node.js Bun Deno Edge-runtimes
18
+ - 🔄 **Динамическая загрузка**
19
+ - Подгрузка новых локалей во время выполнения
20
+ - 🧩 **Интерполяция**
21
+ - Поддержка переменных через `{placeholder}`
22
+ - 🌍 **Fallback-локаль**
23
+ - Автоматический откат на резервную локаль при отсутствии перевода
24
+
25
+ ## Установка
26
+
27
+ ```bash
28
+ # pnpm
29
+ pnpm add @dayanulanov/i18n-light
30
+
31
+ # npm
32
+ npm install @dayanulanov/i18n-light
33
+
34
+ # yarn
35
+ yarn add @dayanulanov/i18n-light
36
+ ```
37
+
38
+ ## Быстрый пример
39
+
40
+ ```ts
41
+ import { createI18n } from '@dayanulanov/i18n-light';
42
+
43
+ const messages = {
44
+ en: {
45
+ hello: 'Hello {name}!'
46
+ goodbye: 'Goodbye!'
47
+ }
48
+ ru: {
49
+ hello: 'Привет {name}!'
50
+ goodbye: 'До свидания!'
51
+ }
52
+ fr: {
53
+ hello: 'Bonjour {name} !'
54
+ }
55
+ } as const;
56
+
57
+ const i18n = createI18n({
58
+ locale: 'ru'
59
+ fallbackLocale: 'en'
60
+ messages
61
+ });
62
+
63
+ // Типобезопасный вызов
64
+ i18n.t('hello' { name: 'Даян' }); // → \Привет Даян!\
65
+ i18n.t('goodbye'); // → \До свидания!\
66
+
67
+ // Переключение локали
68
+ i18n.setLocale('en');
69
+ i18n.t('hello' { name: 'Dayan' }); // → \Hello Dayan!\
70
+
71
+ // Если перевода нет — используется fallback
72
+ i18n.setLocale('fr');
73
+ i18n.t('goodbye'); // → \Goodbye!\ (из en)
74
+ ```
75
+
76
+ ## Основные методы
77
+
78
+ 1. `i18n.t(key variables? locale?)`
79
+ - Перевод с опциональной интерполяцией и переопределением локали
80
+ 2. `i18n.setLocale('en')`
81
+ - Сменить текущую локаль
82
+ 3. `i18n.getLocale()`
83
+ - Получить текущую локаль
84
+ 4. `i18n.loadLocale('es' { hello: '¡Hola!' })`
85
+ - Добавить или расширить локаль во время выполнения
86
+
87
+ ## Динамическая загрузка локалей
88
+
89
+ ```ts
90
+ // Ленивое подгружение переводов по запросу
91
+ fetch('/locales/es.json')
92
+ .then(r => r.json())
93
+ .then(data => {
94
+ i18n.loadLocale('es' data);
95
+ i18n.setLocale('es');
96
+ });
97
+ ```
98
+
99
+ ## Полная типобезопасность
100
+
101
+ - TypeScript знает какие ключи доступны для каждой локали:
102
+ ```ts
103
+ i18n.t('hello'); // OK
104
+ i18n.t('goodbye'); // OK
105
+ // i18n.t('unknown'); // Ошибка компиляции!
106
+ ```
107
+ - Если добавить новую локаль через `loadLocale` типы обновятся после перезапуска TypeScript.
108
+
109
+ ## Примеры использования
110
+
111
+ ### 1. React + Vite
112
+ ```ts
113
+ import { createI18n } from '@dayanulanov/i18n-light';
114
+ import { createContext useContext } from 'react';
115
+
116
+ const i18n = createI18n({ locale: 'en' messages: { en: {} ru: {} } });
117
+ const I18nContext = createContext(i18n);
118
+
119
+ export function App() {
120
+ const { t } = useContext(I18nContext);
121
+ return <h1>{t('hello' { name: 'World' })}</h1>;
122
+ }
123
+ ```
124
+
125
+ ### 2. Node.js / Express
126
+ ```ts
127
+ import express from 'express';
128
+ import { createI18n } from '@dayanulanov/i18n-light';
129
+
130
+ const app = express();
131
+ const i18n = createI18n({ locale: 'en' fallbackLocale: 'en' messages: { en: {} ru: {} } });
132
+
133
+ app.get('/greeting' (req res) => {
134
+ const locale = req.query.lang as string || 'en';
135
+ i18n.setLocale(locale);
136
+ res.send(i18n.t('hello' { name: req.query.name || 'Guest' }));
137
+ });
138
+ ```
139
+
140
+ ## Лицензия
141
+ MIT License
142
+
143
+ ## Автор
144
+ Даян Уланов
145
+ Если библиотека оказалась полезной — поставьте ⭐ на GitHub!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dayanulanov/i18n-light",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "sideEffects": false,
5
5
  "description": "Ultra-light i18n core && Type-safe i18n library for JavaScript/TypeScript",
6
6
  "files": [