mirror of
				https://github.com/kyantech/Palmr.git
				synced 2025-11-03 21:43:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			439 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			439 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
---
 | 
						|
title: Translation Management
 | 
						|
icon: Languages
 | 
						|
---
 | 
						|
 | 
						|
import { Callout } from "fumadocs-ui/components/callout";
 | 
						|
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
 | 
						|
 | 
						|
Palmr includes a comprehensive translation key management system that automates synchronization and validation of the application's internationalization files.
 | 
						|
 | 
						|
## Overview
 | 
						|
 | 
						|
The translation management system consists of Python scripts that help maintain consistency across all supported languages:
 | 
						|
 | 
						|
- **Synchronization**: Automatically add missing translation keys
 | 
						|
- **Validation**: Check translation status and completeness
 | 
						|
- **Key Management**: Manage translation keys structure and consistency
 | 
						|
- **Reporting**: Generate detailed translation reports
 | 
						|
 | 
						|
## Quick Start
 | 
						|
 | 
						|
<Tabs items={['npm/pnpm', 'Python Direct']}>
 | 
						|
  <Tab value="npm/pnpm">
 | 
						|
    ```bash
 | 
						|
    # Complete workflow (recommended)
 | 
						|
    pnpm run translations
 | 
						|
 | 
						|
    # Check translation status
 | 
						|
    pnpm run translations:check
 | 
						|
 | 
						|
    # Synchronize missing keys
 | 
						|
    pnpm run translations:sync
 | 
						|
 | 
						|
    # Test workflow without changes (dry run)
 | 
						|
    pnpm run translations:dry-run
 | 
						|
 | 
						|
    # Show help
 | 
						|
    pnpm run translations:help
 | 
						|
    ```
 | 
						|
 | 
						|
  </Tab>
 | 
						|
  <Tab value="Python Direct">
 | 
						|
    ```bash
 | 
						|
    cd apps/web/scripts
 | 
						|
 | 
						|
    # Complete workflow (recommended)
 | 
						|
    python3 run_translations.py all
 | 
						|
 | 
						|
    # Individual commands
 | 
						|
    python3 run_translations.py check
 | 
						|
    python3 run_translations.py sync
 | 
						|
    python3 run_translations.py all --dry-run
 | 
						|
    python3 run_translations.py help
 | 
						|
    ```
 | 
						|
 | 
						|
  </Tab>
 | 
						|
</Tabs>
 | 
						|
 | 
						|
## Available Scripts
 | 
						|
 | 
						|
### Main Commands (npm/pnpm)
 | 
						|
 | 
						|
| Command                         | Description                               |
 | 
						|
| ------------------------------- | ----------------------------------------- |
 | 
						|
| `pnpm run translations`         | Complete workflow: sync + check           |
 | 
						|
| `pnpm run translations:check`   | Check translation status and completeness |
 | 
						|
| `pnpm run translations:sync`    | Synchronize missing keys from en-US.json  |
 | 
						|
| `pnpm run translations:dry-run` | Test workflow without making changes      |
 | 
						|
| `pnpm run translations:help`    | Show detailed help and examples           |
 | 
						|
 | 
						|
## Workflow
 | 
						|
 | 
						|
### 1. Adding New Translation Keys
 | 
						|
 | 
						|
When you add new text to the application:
 | 
						|
 | 
						|
1. **Add to English**: Update `apps/web/messages/en-US.json` with your new keys
 | 
						|
2. **Sync translations**: Run `pnpm run translations:sync` to add missing keys to all languages
 | 
						|
3. **Manual translation**: Translate strings marked with `[TO_TRANSLATE]` manually
 | 
						|
4. **Test in UI**: Verify translations work correctly in the application interface
 | 
						|
 | 
						|
<Callout type="important">
 | 
						|
  **Manual translation required**: All strings marked with `[TO_TRANSLATE]` must be manually translated by native
 | 
						|
  speakers or professional translators for accuracy.
 | 
						|
</Callout>
 | 
						|
 | 
						|
### 2. Checking Translation Status
 | 
						|
 | 
						|
<Callout>Always run `pnpm run translations:check` before releases to ensure completeness.</Callout>
 | 
						|
 | 
						|
```bash
 | 
						|
# Generate detailed translation report
 | 
						|
pnpm run translations:check
 | 
						|
```
 | 
						|
 | 
						|
The report shows:
 | 
						|
 | 
						|
- **Completeness percentage** for each language
 | 
						|
- **Untranslated strings** marked with `[TO_TRANSLATE]`
 | 
						|
- **Identical strings** that may need localization
 | 
						|
- **Missing keys** compared to English reference
 | 
						|
 | 
						|
### 3. Manual Translation Process
 | 
						|
 | 
						|
For all translation strings:
 | 
						|
 | 
						|
1. **Find untranslated strings**: Look for `[TO_TRANSLATE] Original text` in language files
 | 
						|
2. **Replace with translation**: Remove the prefix and add proper translation
 | 
						|
3. **Validate**: Run `pnpm run translations:check` to verify completeness
 | 
						|
 | 
						|
## File Structure
 | 
						|
 | 
						|
```
 | 
						|
apps/web/
 | 
						|
├── messages/           # Translation files
 | 
						|
│   ├── en-US.json     # Reference language (English)
 | 
						|
│   ├── pt-BR.json     # Portuguese (Brazil)
 | 
						|
│   ├── es-ES.json     # Spanish
 | 
						|
│   └── ...            # Other languages
 | 
						|
│
 | 
						|
└── scripts/           # Management scripts
 | 
						|
    ├── run_translations.py     # Main wrapper
 | 
						|
    ├── sync_translations.py    # Synchronization
 | 
						|
    ├── check_translations.py   # Status checking
 | 
						|
    └── clean_translations.py   # Cleanup utilities
 | 
						|
```
 | 
						|
 | 
						|
## Prerequisites
 | 
						|
 | 
						|
- **Python 3.6 or higher** - Required for running the translation scripts
 | 
						|
- **No external dependencies** - Scripts use only Python standard libraries
 | 
						|
- **UTF-8 support** - Ensure your terminal supports UTF-8 for proper display of translations
 | 
						|
 | 
						|
## Script Details
 | 
						|
 | 
						|
### Main Wrapper (`run_translations.py`)
 | 
						|
 | 
						|
The main script provides a unified interface for all translation operations:
 | 
						|
 | 
						|
#### Available Commands
 | 
						|
 | 
						|
- `check` - Check translation status and generate reports
 | 
						|
- `sync` - Synchronize missing keys from reference language
 | 
						|
- `all` - Run complete workflow (sync + check)
 | 
						|
- `help` - Show detailed help with examples
 | 
						|
 | 
						|
#### How it Works
 | 
						|
 | 
						|
1. Validates parameters and working directory
 | 
						|
2. Calls appropriate individual scripts with passed parameters
 | 
						|
3. Provides unified error handling and progress reporting
 | 
						|
4. Supports all parameters from individual scripts
 | 
						|
 | 
						|
### Synchronization Script (`sync_translations.py`)
 | 
						|
 | 
						|
Maintains consistency across all language files:
 | 
						|
 | 
						|
#### Process
 | 
						|
 | 
						|
1. **Load reference**: Reads `en-US.json` as source of truth
 | 
						|
2. **Scan languages**: Finds all `*.json` files in messages directory
 | 
						|
3. **Compare keys**: Identifies missing keys in each language file
 | 
						|
4. **Add missing keys**: Copies structure from reference with `[TO_TRANSLATE]` prefix
 | 
						|
5. **Save updates**: Maintains JSON formatting and UTF-8 encoding
 | 
						|
 | 
						|
#### Key Features
 | 
						|
 | 
						|
- **Recursive key detection**: Handles nested JSON objects
 | 
						|
- **Safe updates**: Preserves existing translations
 | 
						|
- **Consistent formatting**: Maintains proper JSON structure
 | 
						|
- **Progress reporting**: Shows detailed sync results
 | 
						|
 | 
						|
### Status Check Script (`check_translations.py`)
 | 
						|
 | 
						|
Provides comprehensive translation analysis:
 | 
						|
 | 
						|
#### Generated Reports
 | 
						|
 | 
						|
- **Completion percentage**: How much of each language is translated
 | 
						|
- **Untranslated count**: Strings still marked with `[TO_TRANSLATE]`
 | 
						|
- **Identical strings**: Text identical to English (may need localization)
 | 
						|
- **Missing keys**: Keys present in reference but not in target language
 | 
						|
 | 
						|
#### Analysis Features
 | 
						|
 | 
						|
- **Visual indicators**: Icons show completion status (✅ 🟡 🔴)
 | 
						|
- **Detailed breakdowns**: Per-language analysis with specific keys
 | 
						|
- **Quality insights**: Identifies potential translation issues
 | 
						|
- **Export friendly**: Output can be redirected to files for reports
 | 
						|
 | 
						|
## Advanced Usage
 | 
						|
 | 
						|
### Custom Parameters
 | 
						|
 | 
						|
You can pass additional parameters to the underlying Python scripts for more control:
 | 
						|
 | 
						|
#### Synchronization Parameters (`sync`)
 | 
						|
 | 
						|
```bash
 | 
						|
# Sync without marking new keys as [TO_TRANSLATE]
 | 
						|
python3 scripts/run_translations.py sync --no-mark-untranslated
 | 
						|
 | 
						|
# Use a different reference file (default: en-US.json)
 | 
						|
python3 scripts/run_translations.py sync --reference pt-BR.json
 | 
						|
 | 
						|
# Specify custom messages directory
 | 
						|
python3 scripts/run_translations.py sync --messages-dir /path/to/messages
 | 
						|
 | 
						|
# Dry run mode - see what would be changed
 | 
						|
python3 scripts/run_translations.py sync --dry-run
 | 
						|
```
 | 
						|
 | 
						|
#### Check Parameters (`check`)
 | 
						|
 | 
						|
```bash
 | 
						|
# Use different reference file for comparison
 | 
						|
python3 scripts/run_translations.py check --reference pt-BR.json
 | 
						|
 | 
						|
# Check translations in custom directory
 | 
						|
python3 scripts/run_translations.py check --messages-dir /path/to/messages
 | 
						|
```
 | 
						|
 | 
						|
### Parameter Reference
 | 
						|
 | 
						|
| Parameter                | Commands        | Description                                   |
 | 
						|
| ------------------------ | --------------- | --------------------------------------------- |
 | 
						|
| `--dry-run`              | `sync`, `all`   | Preview changes without modifying files       |
 | 
						|
| `--messages-dir`         | All             | Custom directory containing translation files |
 | 
						|
| `--reference`            | `sync`, `check` | Reference file to use (default: en-US.json)   |
 | 
						|
| `--no-mark-untranslated` | `sync`          | Don't add [TO_TRANSLATE] prefix to new keys   |
 | 
						|
 | 
						|
### Dry Run Mode
 | 
						|
 | 
						|
Always test changes first:
 | 
						|
 | 
						|
```bash
 | 
						|
# Test complete workflow (recommended)
 | 
						|
pnpm run translations:dry-run
 | 
						|
 | 
						|
# Alternative: Direct Python commands
 | 
						|
python3 scripts/run_translations.py all --dry-run
 | 
						|
python3 scripts/run_translations.py sync --dry-run
 | 
						|
```
 | 
						|
 | 
						|
### Common Use Cases
 | 
						|
 | 
						|
#### Scenario 1: Adding Keys Without Marking for Translation
 | 
						|
 | 
						|
```bash
 | 
						|
# Sync new keys without auto-marking for translation
 | 
						|
python3 scripts/run_translations.py sync --no-mark-untranslated
 | 
						|
 | 
						|
# Manually mark specific keys that need translation
 | 
						|
# Edit files to add [TO_TRANSLATE] prefix where needed
 | 
						|
```
 | 
						|
 | 
						|
#### Scenario 2: Custom Project Structure
 | 
						|
 | 
						|
```bash
 | 
						|
# Work with translations in different directory
 | 
						|
python3 scripts/run_translations.py all --messages-dir ../custom-translations
 | 
						|
```
 | 
						|
 | 
						|
#### Scenario 3: Quality Assurance
 | 
						|
 | 
						|
```bash
 | 
						|
# Use different language as reference for comparison
 | 
						|
python3 scripts/run_translations.py check --reference pt-BR.json
 | 
						|
 | 
						|
# This helps identify inconsistencies when you have high-quality translations
 | 
						|
```
 | 
						|
 | 
						|
## Translation Keys Format
 | 
						|
 | 
						|
Translation files use nested JSON structure:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "common": {
 | 
						|
    "actions": {
 | 
						|
      "save": "Save",
 | 
						|
      "cancel": "Cancel",
 | 
						|
      "delete": "Delete"
 | 
						|
    },
 | 
						|
    "messages": {
 | 
						|
      "success": "Operation completed successfully",
 | 
						|
      "error": "An error occurred"
 | 
						|
    }
 | 
						|
  },
 | 
						|
  "dashboard": {
 | 
						|
    "title": "Dashboard",
 | 
						|
    "welcome": "Welcome to Palmr"
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Manual Translation
 | 
						|
 | 
						|
<Callout type="warning">
 | 
						|
  **Professional translation recommended**: For production applications, consider using professional translation
 | 
						|
  services or native speakers to ensure high-quality, culturally appropriate translations.
 | 
						|
</Callout>
 | 
						|
 | 
						|
The system marks strings that need translation with the `[TO_TRANSLATE]` prefix:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "key": "[TO_TRANSLATE] Original English text"
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
After manual translation:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "key": "Texto original em inglês"
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Translation Review Process
 | 
						|
 | 
						|
1. **Identify**: Use `pnpm run translations:check` to find untranslated strings
 | 
						|
2. **Translate**: Replace `[TO_TRANSLATE]` strings with proper translations
 | 
						|
3. **Review**: Check each translation for:
 | 
						|
   - **Context accuracy**: Does it make sense in the UI?
 | 
						|
   - **Technical terms**: Are they correctly translated?
 | 
						|
   - **Tone consistency**: Matches the application's voice?
 | 
						|
   - **Cultural appropriateness**: Suitable for target audience?
 | 
						|
4. **Test**: Verify translations in the actual application interface
 | 
						|
5. **Document**: Note any translation decisions for future reference
 | 
						|
 | 
						|
### Common Review Points
 | 
						|
 | 
						|
- **Button labels**: Ensure they fit within UI constraints
 | 
						|
- **Error messages**: Must be clear and helpful to users
 | 
						|
- **Navigation items**: Should be intuitive in target language
 | 
						|
- **Technical terms**: Some may be better left in English
 | 
						|
- **Placeholders**: Maintain formatting and variable names
 | 
						|
 | 
						|
## Development Guidelines
 | 
						|
 | 
						|
<Callout type="important">
 | 
						|
  **Primary Language**: Always use `en-US.json` as the parent language for development. All new translation keys must be
 | 
						|
  added to English first.
 | 
						|
</Callout>
 | 
						|
 | 
						|
### Translation Workflow for Development
 | 
						|
 | 
						|
1. **English First**: Add all new text to `apps/web/messages/en-US.json`
 | 
						|
2. **Sync keys**: Use scripts to generate key structure for other languages
 | 
						|
3. **Manual translation**: All strings must be manually translated for accuracy
 | 
						|
4. **Quality Check**: Run translation validation before merging PRs
 | 
						|
 | 
						|
### Why English as Parent Language?
 | 
						|
 | 
						|
- **Consistency**: Ensures all languages have the same keys structure
 | 
						|
- **Reference**: English serves as the source of truth for meaning
 | 
						|
- **Key management**: Scripts use English as source for key synchronization
 | 
						|
- **Documentation**: Most technical documentation is in English
 | 
						|
 | 
						|
## Best Practices
 | 
						|
 | 
						|
### For Developers
 | 
						|
 | 
						|
1. **Always use English as reference**: Add new keys to `en-US.json` first - never add keys directly to other languages
 | 
						|
2. **Use semantic key names**: `dashboard.welcome` instead of `text1`
 | 
						|
3. **Test key sync**: Run `pnpm run translations:dry-run` before committing
 | 
						|
4. **Coordinate with translators**: Ensure translation team is aware of new keys
 | 
						|
5. **Maintain consistency**: Use existing patterns for similar UI elements
 | 
						|
 | 
						|
### For Translators
 | 
						|
 | 
						|
1. **Focus on [TO_TRANSLATE] strings**: These need immediate attention
 | 
						|
2. **Check identical strings**: May need localization even if identical to English
 | 
						|
3. **Use proper formatting**: Maintain HTML tags and placeholders
 | 
						|
4. **Test in context**: Verify translations work in the actual UI
 | 
						|
5. **Maintain glossary**: Keep consistent terminology across translations
 | 
						|
 | 
						|
## Troubleshooting
 | 
						|
 | 
						|
### Common Issues
 | 
						|
 | 
						|
**Python not found**: Ensure Python 3.6+ is installed and in PATH
 | 
						|
 | 
						|
**Permission errors**: Ensure write permissions to message files
 | 
						|
 | 
						|
**Encoding issues**: Ensure your terminal supports UTF-8
 | 
						|
 | 
						|
### Getting Help
 | 
						|
 | 
						|
- Run `pnpm run translations:help` for detailed command examples
 | 
						|
- Review generated translation reports for specific issues
 | 
						|
- Check the official documentation for complete reference
 | 
						|
 | 
						|
## Output Examples
 | 
						|
 | 
						|
### Synchronization Output
 | 
						|
 | 
						|
```
 | 
						|
Loading reference file: en-US.json
 | 
						|
Reference file contains 980 keys
 | 
						|
Processing 14 translation files...
 | 
						|
 | 
						|
Processing: pt-BR.json
 | 
						|
  🔍 Found 12 missing keys
 | 
						|
  ✅ Updated successfully (980/980 keys)
 | 
						|
 | 
						|
============================================================
 | 
						|
SUMMARY
 | 
						|
============================================================
 | 
						|
✅ ar-SA.json      - 980/980 keys
 | 
						|
🔄 pt-BR.json      - 980/980 keys (+12 added)
 | 
						|
```
 | 
						|
 | 
						|
### Translation Status Report
 | 
						|
 | 
						|
```
 | 
						|
📊 TRANSLATION REPORT
 | 
						|
Reference: en-US.json (980 strings)
 | 
						|
================================================================================
 | 
						|
LANGUAGE        COMPLETENESS STRINGS         UNTRANSLATED    POSSIBLE MATCHES
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
✅ pt-BR         100.0%       980/980         0 (0.0%)        5
 | 
						|
⚠️  fr-FR         100.0%       980/980         12 (2.5%)       3
 | 
						|
🟡 de-DE         95.2%        962/980         0 (0.0%)        8
 | 
						|
================================================================================
 | 
						|
```
 | 
						|
 | 
						|
## Contributing
 | 
						|
 | 
						|
When contributing translations:
 | 
						|
 | 
						|
1. **Follow the workflow**: Use the provided scripts for consistency
 | 
						|
2. **Test thoroughly**: Run complete checks before submitting
 | 
						|
3. **Document changes**: Note any significant translation decisions
 | 
						|
4. **Maintain quality**: Ensure manual translations are accurate and appropriate
 | 
						|
 | 
						|
The translation management system ensures consistency and makes it easy to maintain high-quality localization across all supported languages.
 |