К содержимому

Справочник CLI

svelte-dialect поставляется с одним исполняемым файлом и тремя командами: typegen, check и migrate. Конфиг-файла нет, все настройки задаются флагами.

Запуск #

Без аргументов или с единственным аргументом --help он печатает список команд и завершается с кодом 0. Неизвестная команда печатает тот же список и завершается с кодом 1. Неизвестный флаг, каталог сообщений, который не удалось прочитать, и некорректный JSON тоже считаются ошибками: команда печатает одну строку в stderr и завершается с кодом 1.

npx svelte-dialect <command> [flags]

typegen #

Записывает .d.ts-файл с union MessageKey и формами MessageParams. Как ими пользоваться, показано на странице «Типы и CLI».

$ npx svelte-dialect typegen --messages src/lib/messages --out src/lib/i18n-keys.d.ts
svelte-dialect typegen: 3 keys → src/lib/i18n-keys.d.ts

Флаги #

ФлагПо умолчаниюОписание
--messages <dir>src/lib/messagesКаталог сообщений со структурой <locale>/<namespace>.json. Флаг можно повторять, чтобы объединить несколько каталогов, например собранное и ленивое дерево. Игнорируется, если указан --from-json.
--from-json <file>—Прочитать JSON-дамп вида {locale: {namespace: {…}}} вместо каталога. Нужен для каталогов, которые лежат в базе данных.
--out <file>src/lib/i18n-keys.d.tsФайл для записи. Каталог, в котором он лежит, должен уже существовать. Существующий файл перезаписывается.

Коды выхода #

КодКогда
0Файл записан.
1Неизвестный флаг, каталог --messages или файл --from-json не читается, некорректный JSON или в путь --out нельзя записать.

check #

Сравнивает вызовы t('ns:key') в вашем коде с файлами сообщений, чтобы переименованный или удалённый ключ ломал CI, а не показывался в продакшене сырым текстом.

$ npx svelte-dialect check --unused
Missing:
  home:footer — missing in en, ru
  home:greeting — missing in ru
Unused:
  home:old
3 keys used, 2 missing, 1 unused
$ echo $?
1

Сканирование — это текстовый поиск, а не разбор кода. Он видит только строковые литералы: ключ, собранный из переменной или из шаблонной строки с ${…}, пропускается и в списке отсутствующих, и при --unused. Вызов loadTranslations('ns') проверяется как ns:*: ошибка, если в какой-то локали нет такого неймспейса.

Флаги #

ФлагПо умолчаниюОписание
--messages <dir>src/lib/messagesКаталог сообщений со структурой <locale>/<namespace>.json. Можно повторять.
--src <dir>srcКаталог, который сканируется рекурсивно на файлы .ts, .js и .svelte. node_modules и каталоги, имя которых начинается с точки, пропускаются.
--unusedfalseДополнительно вывести ключи из файлов сообщений, на которые не ссылается ни один код. На код выхода не влияет.

Коды выхода #

КодКогда
0Каждый ключ, который использует код, есть во всех локалях.
1Используемого ключа нет хотя бы в одной локали, в --messages не нашлось ни одной локали при используемых ключах или команда завершилась ошибкой, описанной в разделе «Запуск».

migrate #

Преобразует JSON-файлы i18next и ICU MessageFormat в MF2 прямо на месте. Руководство по переходу проводит через одну миграцию от начала до конца.

$ npx svelte-dialect migrate --dry-run --strict
svelte-dialect migrate: en/common.json — 3 converted, 0 unchanged, 1 warnings
  …
svelte-dialect migrate: 3 messages would change, 1 warnings (dry run, nothing written)
svelte-dialect migrate: --strict: 1 warnings, exiting with 1

Результаты и итоговая строка идут в stdout, предупреждения — в stderr. Файл переписывается, только если изменилось хотя бы одно его сообщение, и записывается как JSON с отступами табами. Повторный запуск ничего не меняет.

Флаги #

ФлагПо умолчаниюОписание
--messages <dir>src/lib/messagesКаталог сообщений для преобразования со структурой <locale>/<namespace>.json. Можно повторять: каждый каталог обрабатывается отдельно.
--dry-runfalseВывести каждое изменение как пару «до/после» и ничего не записывать.
--strictfalseЗавершиться с кодом 1, если было хотя бы одно предупреждение. Файлы при этом всё равно записываются: флаг меняет только код выхода, для CI.

Коды выхода #

КодКогда
0Команда отработала. Одни только предупреждения не считаются ошибкой.
1Указан --strict, и было хотя бы одно предупреждение.
1В каталоге лежат только плоские файлы <locale>.json, поэтому мигрировать было нечего. Переложите каждый в <locale>/<namespace>.json.
1Неизвестный флаг, каталог сообщений не читается или некорректный JSON.