В SvelteKit интернационализация (i18n) реализуется через подключение специализированных библиотек, которые позволяют работать с многоязычными интерфейсами, динамически менять язык приложения и локализовать контент. Основные задачи i18n включают:
Наиболее популярные библиотеки для i18n в SvelteKit:
npm install svelte-i18n
Создаём файл конфигурации i18n.js:
import { register, init, getLocaleFromNavigator } from 'svelte-i18n';
register('en', () => import('./locales/en.json'));
register('ru', () => import('./locales/ru.json'));
init({
fallbackLocale: 'en',
initialLocale: getLocaleFromNavigator(),
});
Пояснение ключевых моментов:
register – динамически подключает JSON-файлы с
переводами.init – инициализация библиотеки с указанием fallback
языка и начальной локали.getLocaleFromNavigator – определяет язык пользователя
по настройкам браузера.Файлы JSON обычно имеют вложенную структуру для удобства:
{
"header": {
"title": "Добро пожаловать",
"subtitle": "Учебник по SvelteKit"
},
"buttons": {
"save": "Сохранить",
"cancel": "Отмена"
}
}
Такая структура облегчает поиск и поддержку переводов при масштабировании проекта.
<script>
import { t } from 'svelte-i18n';
</script>
<h1>{$t('header.title')}</h1>
<p>{$t('header.subtitle')}</p>
<button>{$t('buttons.save')}</button>
<button>{$t('buttons.cancel')}</button>
Особенности:
$t является реактивным store, автоматически обновляет
текст при смене языка.Для переключения языка в приложении используется метод
locale.set:
<script>
import { locale } from 'svelte-i18n';
function changeLanguage(lang) {
locale.set(lang);
}
</script>
<sel ect on:change="{e => changeLanguage(e.target.value)}">
<option value="en">English</option>
<option value="ru">Русский</option>
</select>
Смена локали автоматически обновляет все компоненты, использующие
$t.
svelte-i18n поддерживает функции форматирования:
<script>
import { format } fr om 'svelte-i18n';
let price = 12345.67;
let date = new Date();
</script>
<p>{format(price, { style: 'currency', currency: 'USD' })}</p>
<p>{format(date, { dateStyle: 'long' })}</p>
style: 'currency' форматирует число как валюту.dateStyle позволяет управлять форматированием даты
(short, medium, long, full).Для многоязычных маршрутов можно использовать динамические сегменты
[lang]:
src/routes/[lang]/+page.svelte
В +layout.js:
import { locale } from 'svelte-i18n';
export function load({ params }) {
locale.set(params.lang);
return {};
}
Это позволяет подгружать нужный язык для каждого маршрута и сохранять консистентность приложения при серверном рендеринге.
{
"items": "{count} товар |||| {count} товара |||| {count} товаров"
}
Эти методы делают i18n в SvelteKit гибким и масштабируемым инструментом для построения мультиязычных приложений с реактивным UI.