@ttoss/i18n-cli
A CLI tool for extracting and compiling translations from your code using FormatJS. Automatically handles translations from your application and all ttoss packages.
Key Featuresβ
- Automatic extraction from source code using FormatJS patterns
- Unified translation management for your app and ttoss packages
- Missing translation detection with detailed reports
- Unused translation cleanup to maintain clean translation files
- Flexible compilation with optional steps
- Custom file patterns and ignore rules
Installationβ
pnpm add @ttoss/i18n-cli --dev
Quick Startβ
Add script to your package.json:
{
"scripts": {
"i18n": "ttoss-i18n"
}
}
Add to .gitignore:
i18n/compiled/
i18n/missing/
i18n/unused/
Run extraction and compilation:
pnpm i18n
How It Worksβ
The CLI creates a structured workflow for managing translations:
π i18n/
βββ π lang/ # Translation files
β βββ π en.json # Auto-generated (don't edit)
β βββ π pt-BR.json # Edit with your translations
βββ π compiled/ # Auto-generated (production files)
β βββ π en.json # Compiled for runtime
β βββ π pt-BR.json # Compiled for runtime
βββ π missing/ # Auto-generated (analysis reports)
β βββ π pt-BR.json # What needs translation
βββ π unused/ # Auto-generated (cleanup reports)
βββ π pt-BR.json # Unused translations per language
Usageβ
Basic Commandsβ
Extract and compile everything:
pnpm i18n
Extract only (no compilation):
pnpm i18n --no-compile
Ignore ttoss package translations:
pnpm i18n --ignore-ttoss-packages
Custom file patterns:
pnpm i18n --pattern "src/**/*.{ts,tsx}" --ignore "**/*.test.*"
Translation Workflowβ
Follow this step-by-step process to set up internationalization:
Step 1: Write Code with FormatJS Messagesβ
import { FormattedMessage } from 'react-intl';
<FormattedMessage
defaultMessage="Welcome to our app!"
description="Main welcome message"
/>;
Step 2: Extract Messages from Source Codeβ
pnpm i18n --no-compile
Result: Creates i18n/lang/en.json directly with all messages found in your code:
{
"2mAHlQ": {
"defaultMessage": "Welcome to our app!",
"description": "Main welcome message"
}
}
Important: Don't edit
en.jsonmanually - it will be overwritten on next extraction.
Step 3: Create Translation Filesβ
Copy the base English file to create other language files:
# Create files for other languages
cp i18n/lang/en.json i18n/lang/pt-BR.json
cp i18n/lang/en.json i18n/lang/es.json
Step 4: Translate Your Messagesβ
Edit each language file with the appropriate translations:
These are the ONLY files you should edit manually
i18n/lang/pt-BR.json:
{
"2mAHlQ": {
"defaultMessage": "Bem-vindo ao nosso app!",
"description": "Mensagem principal de boas-vindas"
}
}
i18n/lang/es.json:
{
"2mAHlQ": {
"defaultMessage": "Β‘Bienvenido a nuestra app!",
"description": "Mensaje principal de bienvenida"
}
}
Step 5: Compile for Productionβ
pnpm i18n
Result: Generates optimized compiled files and analysis reports:
i18n/compiled/- Production-ready translation filesi18n/missing/- Shows untranslated messagesi18n/unused/- Identifies unused translations
Generated Filesβ
Base Language File (i18n/lang/en.json) - Auto-generated:
{
"2mAHlQ": {
"defaultMessage": "Welcome to our app!",
"description": "Main welcome message"
}
}
Translation Files (i18n/lang/pt-BR.json) - Edit with your translations:
{
"2mAHlQ": {
"defaultMessage": "Bem-vindo ao nosso app!",
"description": "Mensagem principal de boas-vindas"
}
}
Compiled Output (i18n/compiled/pt-BR.json) - Auto-generated:
{
"2mAHlQ": [
{
"type": 0,
"value": "Bem-vindo ao nosso app!"
}
]
}
Analysis Reportsβ
The CLI automatically generates helpful reports to assist with translation management:
- Missing translations (
i18n/missing/LANG.json): Shows what needs translation - Unused translations (
i18n/unused/LANG.json): Identifies translations to remove per language
Note: All reports are auto-generated - use them as reference only.
Command Optionsβ
| Option | Description |
|---|---|
--no-compile | Extract only, skip compilation step |
--ignore-ttoss-packages | Skip extraction from ttoss dependencies |
--pattern <glob> | Custom file pattern for extraction (default: src/**/*.{js,jsx,ts,tsx}) |
--ignore <patterns> | Files/patterns to ignore during extraction |
Integration with ttoss Ecosystemβ
When using ttoss packages like @ttoss/react-i18n, the CLI automatically:
- Extracts translations from installed ttoss packages
- Merges them with your application translations
- Provides unified translation management
This eliminates manual copying of package translations and ensures consistency across your application.