2026-01-14 04:56:33 +00:00
|
|
|
# Multilingual Provisioning System - Translation Status
|
|
|
|
|
|
|
|
|
|
**Last Updated**: 2026-01-13
|
|
|
|
|
**Status**: 100% Complete (Phases 1-4D)
|
|
|
|
|
|
|
|
|
|
## Executive Summary
|
|
|
|
|
|
|
|
|
|
The Provisioning system now supports comprehensive multilingual interfaces across all components:
|
|
|
|
|
|
|
|
|
|
- **Help System**: 65 strings extracted and translated
|
|
|
|
|
- **Forms**: ~180 strings covering setup, authentication, and infrastructure management
|
|
|
|
|
- **Supported Languages**: English (en-US), Spanish (es-ES) with infrastructure for future additions
|
|
|
|
|
|
|
|
|
|
## Language Coverage
|
|
|
|
|
|
|
|
|
|
### English (en-US) - 100% Complete ✅
|
|
|
|
|
|
|
|
|
|
**Source of Truth**: `/provisioning/locales/en-US/`
|
|
|
|
|
|
|
|
|
|
| Component | File | Strings | Status |
|
|
|
|
|
|-----------|------|---------|--------|
|
|
|
|
|
| Help System | `help.ftl` | 65 | ✅ Complete |
|
|
|
|
|
| Forms | `forms.ftl` | 180 | ✅ Complete |
|
|
|
|
|
| **Total** | | **245** | **✅ Complete** |
|
|
|
|
|
|
|
|
|
|
### Spanish (es-ES) - 100% Complete ✅
|
|
|
|
|
|
|
|
|
|
**Source of Truth**: `/provisioning/locales/es-ES/`
|
|
|
|
|
|
|
|
|
|
| Component | File | Strings | Status |
|
|
|
|
|
|-----------|------|---------|--------|
|
|
|
|
|
| Help System | `help.ftl` | 65 | ✅ Complete |
|
|
|
|
|
| Forms | `forms.ftl` | 180 | ✅ Complete |
|
|
|
|
|
| **Total** | | **245** | **✅ Complete** |
|
|
|
|
|
|
|
|
|
|
## String Breakdown by Category
|
|
|
|
|
|
|
|
|
|
### Help System (65 strings)
|
|
|
|
|
|
|
|
|
|
**Main Menu** (26 strings):
|
|
|
|
|
- Title, subtitle, category hint
|
|
|
|
|
- 13 category names and descriptions (infrastructure, orchestration, development, workspace, platform, setup, authentication, plugins, utilities, tools, vm, diagnostics, concepts, guides, integrations)
|
|
|
|
|
- 3 error messages
|
|
|
|
|
|
|
|
|
|
**Infrastructure** (21 strings):
|
|
|
|
|
- Section title
|
|
|
|
|
- Server operations (4 strings)
|
|
|
|
|
- TaskServ management (4 strings)
|
|
|
|
|
- Cluster management (4 strings)
|
|
|
|
|
- VM operations (4 strings)
|
|
|
|
|
- Infrastructure tip
|
|
|
|
|
|
|
|
|
|
**Orchestration** (18 strings):
|
|
|
|
|
- Section title
|
|
|
|
|
- Orchestrator management (5 strings)
|
|
|
|
|
- Workflow operations (5 strings)
|
|
|
|
|
- Batch operations (7 strings)
|
|
|
|
|
- Batch workflows tip + example
|
|
|
|
|
|
|
|
|
|
### Forms (180 strings)
|
|
|
|
|
|
|
|
|
|
**Unified Setup Form** (~140 strings):
|
|
|
|
|
- Project information (project name, version, description)
|
|
|
|
|
- Database configuration (PostgreSQL, MySQL, MongoDB, SQLite)
|
|
|
|
|
- API service configuration (name, ports, health check, replicas)
|
|
|
|
|
- Deployment options (Docker Compose, Kubernetes, Cloud)
|
|
|
|
|
- Advanced options (monitoring, TLS)
|
|
|
|
|
- Security & authentication (JWT, OAuth2, SAML, None)
|
|
|
|
|
- Terms & conditions (terms, newsletter, save address)
|
|
|
|
|
|
|
|
|
|
**Core Forms** (~40 strings):
|
|
|
|
|
- Auth login form (username, password, remember me, forgot password)
|
|
|
|
|
- Setup wizard (quick, standard, advanced)
|
|
|
|
|
- MFA enrollment (TOTP, SMS, backup codes, device name)
|
|
|
|
|
|
|
|
|
|
**Infrastructure Forms** (interactive):
|
|
|
|
|
- Delete confirmations (30+ potential variations for different resources)
|
|
|
|
|
- Resource confirmation prompts
|
|
|
|
|
- Data retention options
|
|
|
|
|
|
|
|
|
|
## TypeDialog Integration
|
|
|
|
|
|
|
|
|
|
### Configured Forms
|
|
|
|
|
|
|
|
|
|
The following root forms have `locales_path` configured to use Fluent catalogs:
|
|
|
|
|
|
|
|
|
|
| Form | Path | locales_path |
|
|
|
|
|
|------|------|--------------|
|
|
|
|
|
| Unified Setup | `.typedialog/provisioning/form.toml` | `../../../locales` |
|
|
|
|
|
| CI Configuration | `.typedialog/ci/form.toml` | `../../../locales` |
|
|
|
|
|
| Core Auth | `.typedialog/core/forms/auth-login.toml` | `../../../../../locales` |
|
|
|
|
|
| Core Setup Wizard | `.typedialog/core/forms/setup-wizard.toml` | `../../../../../locales` |
|
|
|
|
|
| Core MFA | `.typedialog/core/forms/mfa-enroll.toml` | `../../../../../locales` |
|
|
|
|
|
|
|
|
|
|
**Note**: Fragment forms (70+ files) inherit locales from their parent forms through TypeDialog's `load_fragments` mechanism.
|
|
|
|
|
|
|
|
|
|
## Fluent File Organization
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
provisioning/locales/
|
|
|
|
|
├── i18n-config.toml # Central i18n configuration
|
|
|
|
|
├── TRANSLATIONS_STATUS.md # This file
|
|
|
|
|
├── en-US/ # English base language
|
|
|
|
|
│ ├── help.ftl # Help system strings (65 keys)
|
|
|
|
|
│ └── forms.ftl # Form strings (180 keys)
|
|
|
|
|
└── es-ES/ # Spanish translations
|
|
|
|
|
├── help.ftl # Help system translations
|
|
|
|
|
└── forms.ftl # Form translations
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Fallback Chains
|
|
|
|
|
|
|
|
|
|
When a string is missing in the active locale, TypeDialog automatically falls back to the configured chain:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
es-ES → en-US (default)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Configuration** in `i18n-config.toml`:
|
|
|
|
|
```toml
|
|
|
|
|
[fallback_chains]
|
|
|
|
|
es-ES = ["en-US"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This ensures that if any Spanish translation is missing, the English version is displayed as a fallback.
|
|
|
|
|
|
|
|
|
|
## Feature Configuration
|
|
|
|
|
|
|
|
|
|
The i18n system supports these features (enabled in `i18n-config.toml`):
|
|
|
|
|
|
|
|
|
|
| Feature | Status | Purpose |
|
|
|
|
|
|---------|--------|---------|
|
|
|
|
|
| Pluralization | ✅ Enabled | Support plural forms in translations |
|
|
|
|
|
| Number Formatting | ✅ Enabled | Locale-specific number/currency formatting |
|
|
|
|
|
| Date Formatting | ✅ Enabled | Locale-specific date formats |
|
|
|
|
|
| Fallback Chains | ✅ Enabled | Automatic fallback to English |
|
|
|
|
|
| Gender Agreement | ⚠️ Disabled | Spanish doesn't need gender in these strings |
|
|
|
|
|
| RTL Support | ⚠️ Disabled | No RTL languages configured yet |
|
|
|
|
|
|
|
|
|
|
## Translation Quality Standards
|
|
|
|
|
|
|
|
|
|
### Naming Conventions
|
|
|
|
|
|
|
|
|
|
All Fluent keys follow a consistent pattern:
|
|
|
|
|
|
|
|
|
|
- **Help strings**: `help-{category}-{element}` (e.g., `help-infra-server-create`)
|
|
|
|
|
- **Form prompts**: `form-{element}-prompt` (e.g., `form-project_name-prompt`)
|
|
|
|
|
- **Form help**: `form-{element}-help` (e.g., `form-project_name-help`)
|
|
|
|
|
- **Form placeholders**: `form-{element}-placeholder`
|
|
|
|
|
- **Form options**: `form-{element}-option-{value}` (e.g., `form-database_type-option-postgres`)
|
|
|
|
|
- **Section headers**: `section-{name}-title`
|
|
|
|
|
|
|
|
|
|
### Coverage Requirements
|
|
|
|
|
|
|
|
|
|
From `i18n-config.toml`:
|
|
|
|
|
|
|
|
|
|
- **Required Coverage**: 95% (critical locales: en-US, es-ES)
|
|
|
|
|
- **Warning Threshold**: 80%
|
|
|
|
|
- **Validation**: Missing keys trigger warnings during build
|
|
|
|
|
|
|
|
|
|
## Testing & Validation
|
|
|
|
|
|
|
|
|
|
### Locale Resolution
|
|
|
|
|
|
|
|
|
|
The system uses the `LANG` environment variable for locale selection:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# English (default)
|
|
|
|
|
$ LANG=en_US provisioning help infrastructure
|
|
|
|
|
# Output: SERVER & INFRASTRUCTURE...
|
|
|
|
|
|
|
|
|
|
# Spanish
|
|
|
|
|
$ LANG=es_ES provisioning help infrastructure
|
|
|
|
|
# Output: SERVIDOR E INFRAESTRUCTURA...
|
|
|
|
|
|
|
|
|
|
# Fallback to English if missing locale file
|
|
|
|
|
$ LANG=fr_FR provisioning help infrastructure
|
|
|
|
|
# Output: SERVER & INFRASTRUCTURE... (fallback)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Form Testing
|
|
|
|
|
|
|
|
|
|
TypeDialog forms automatically use the configured locale:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
# Display Unified Setup in English
|
|
|
|
|
$ LANG=en_US provisioning setup profile
|
|
|
|
|
|
|
|
|
|
# Display Unified Setup in Spanish
|
|
|
|
|
$ LANG=es_ES provisioning setup profile
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Coverage Validation
|
|
|
|
|
|
|
|
|
|
To validate translation coverage:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Check translation status
|
|
|
|
|
provisioning i18n status
|
|
|
|
|
|
|
|
|
|
# Generate coverage report
|
|
|
|
|
provisioning i18n coverage --locale es-ES
|
|
|
|
|
# Expected: 100% (245/245 strings translated)
|
|
|
|
|
|
|
|
|
|
# Validate Fluent files
|
|
|
|
|
provisioning i18n validate
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Future Expansion
|
|
|
|
|
|
|
|
|
|
The infrastructure supports adding new languages. To add a new locale (e.g., Portuguese):
|
|
|
|
|
|
|
|
|
|
### 1. Add Locale Configuration
|
|
|
|
|
|
|
|
|
|
In `i18n-config.toml`:
|
|
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[locales.pt-BR]
|
|
|
|
|
name = "Portuguese (Brazil)"
|
|
|
|
|
direction = "ltr"
|
|
|
|
|
plurals = 2
|
|
|
|
|
decimal_separator = ","
|
|
|
|
|
thousands_separator = "."
|
|
|
|
|
date_format = "DD/MM/YYYY"
|
|
|
|
|
|
|
|
|
|
[fallback_chains]
|
|
|
|
|
pt-BR = ["pt-PT", "es-ES", "en-US"]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2. Create Locale Directory
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
mkdir -p provisioning/locales/pt-BR
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3. Create Translation Files
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cp provisioning/locales/en-US/help.ftl provisioning/locales/pt-BR/help.ftl
|
|
|
|
|
cp provisioning/locales/en-US/forms.ftl provisioning/locales/pt-BR/forms.ftl
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4. Translate Strings
|
|
|
|
|
|
|
|
|
|
Update `pt-BR/help.ftl` and `pt-BR/forms.ftl` with Portuguese translations.
|
|
|
|
|
|
|
|
|
|
### 5. Validate
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
provisioning i18n validate --locale pt-BR
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Architecture & Implementation Details
|
|
|
|
|
|
|
|
|
|
### Mozilla Fluent Format
|
|
|
|
|
|
|
|
|
|
All translations use Mozilla Fluent (.ftl files), which offers:
|
|
|
|
|
|
|
|
|
|
- **Simple Syntax**: `key = value` format
|
|
|
|
|
- **Rich Features**: Pluralization, gender agreement, attributes
|
|
|
|
|
- **Fallback Support**: Automatic chain resolution
|
|
|
|
|
- **Extensibility**: Support for custom functions and formatting
|
|
|
|
|
|
|
|
|
|
**Example**:
|
|
|
|
|
```bash
|
|
|
|
|
help-infra-server-create = Create a new server
|
|
|
|
|
form-database_type-option-postgres = PostgreSQL (Recommended)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### TypeDialog Integration
|
|
|
|
|
|
|
|
|
|
TypeDialog forms reference Fluent keys via `locales_path`:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
locales_path = "../../../locales"
|
|
|
|
|
|
|
|
|
|
[[elements]]
|
|
|
|
|
name = "project_name"
|
|
|
|
|
prompt = "form-project_name-prompt" # References: locales/*/forms.ftl
|
|
|
|
|
help = "form-project_name-help"
|
|
|
|
|
placeholder = "form-project_name-placeholder"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
TypeDialog's locale resolution:
|
|
|
|
|
|
|
|
|
|
1. Check `locales_path` configuration
|
|
|
|
|
2. Look for `LANG` environment variable (e.g., `es_ES`)
|
|
|
|
|
3. Find corresponding Fluent file (e.g., `es-ES/forms.ftl`)
|
|
|
|
|
4. Resolve key → value
|
|
|
|
|
5. Fallback to parent locale chain if missing
|
|
|
|
|
6. Use literal key if no translation found
|
|
|
|
|
|
|
|
|
|
## Coverage Metrics
|
|
|
|
|
|
|
|
|
|
### String Count Summary
|
|
|
|
|
|
|
|
|
|
| Category | en-US | es-ES | Coverage |
|
|
|
|
|
|----------|-------|-------|----------|
|
|
|
|
|
| Help System | 65 | 65 | 100% ✅ |
|
|
|
|
|
| Forms | 180 | 180 | 100% ✅ |
|
|
|
|
|
| **Total** | **245** | **245** | **100%** ✅ |
|
|
|
|
|
|
|
|
|
|
### Language Support
|
|
|
|
|
|
|
|
|
|
| Locale | Strings | Status | Notes |
|
|
|
|
|
|--------|---------|--------|-------|
|
|
|
|
|
| en-US | 245 | ✅ Complete | Base language |
|
|
|
|
|
| es-ES | 245 | ✅ Complete | Full translation |
|
|
|
|
|
| pt-BR | - | 🔄 Planned | Infrastructure ready |
|
|
|
|
|
| fr-FR | - | 🔄 Planned | Infrastructure ready |
|
|
|
|
|
| ja-JP | - | 🔄 Planned | Infrastructure ready |
|
|
|
|
|
|
|
|
|
|
## Maintenance & Updates
|
|
|
|
|
|
|
|
|
|
### Adding Translations
|
|
|
|
|
|
|
|
|
|
When new forms or help sections are added:
|
|
|
|
|
|
|
|
|
|
1. Extract strings using extraction tools
|
|
|
|
|
2. Add Fluent keys to `en-US/*.ftl`
|
|
|
|
|
3. Translate to `es-ES/*.ftl`
|
|
|
|
|
4. Update this status document
|
|
|
|
|
|
|
|
|
|
### Validation Checklist
|
|
|
|
|
|
|
|
|
|
- [ ] All new strings have Fluent keys
|
|
|
|
|
- [ ] Keys follow naming conventions
|
|
|
|
|
- [ ] English translation complete
|
|
|
|
|
- [ ] Spanish translation complete
|
|
|
|
|
- [ ] Fallback chains tested
|
|
|
|
|
- [ ] LANG environment variable works
|
|
|
|
|
- [ ] TypeDialog forms display correctly
|
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
|
|
- **Fluent Documentation**: https://projectfluent.org/
|
|
|
|
|
- **TypeDialog i18n**: TypeDialog embedded documentation
|
|
|
|
|
- **i18n Configuration**: See `provisioning/locales/i18n-config.toml`
|
|
|
|
|
- **Help System**: See `provisioning/core/nulib/main_provisioning/help_system.nu`
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
**Status**: ✅ Complete
|
|
|
|
|
**Phases Completed**: 1, 2, 3, 4A, 4B, 4C, 4D
|
|
|
|
|
**Ready for**: Production deployment, further language additions, testing
|