VideoTools/docs/localization-policy.md
VideoTools CI 965242a767 Add comprehensive Windows 11 support and localization infrastructure
- Enhanced Windows 11 native installer with GPU detection and DirectX 12 support
- Add cross-platform GUI detection utilities for improved platform handling
- Implement localization infrastructure foundation with i18n support
- Create comprehensive cross-platform deployment guide
- Add Inuktitut and Cree syllabics support framework
- Enhanced Arch Linux installation with desktop environment detection
- Implement Windows 11 DPI awareness and display scaling support
- Add automated cross-platform testing framework
2026-01-17 03:05:12 -05:00

127 lines
3.3 KiB
Markdown

# VideoTools Localization Strategy and Implementation Guide
## Overview
This document provides a comprehensive guide to VideoTools' localization system, including implementation details, contribution guidelines, and cultural considerations.
## Quick Start
### Architecture
- **Primary System**: VideoTools-controlled localization via go-i18n
- **Fyne Integration**: Minimal, only for system dialogs
- **Strategy**: Module-by-module localization with cultural respect
### Language Priority
1. **English (en-CA)** - Source language
2. **French (fr-CA)** - Canadian official language
3. **Indigenous Languages** - Inuktitut, Cree (human-reviewed)
4. **Global Languages** - Future expansion
## Implementation Guide
### File Structure
```
localization/
├── en-CA/
│ ├── meta.json
│ ├── common.json
│ ├── convert.json
│ └── [module files]
├── fr-CA/
│ └── [same structure]
├── iu/
│ ├── meta.json
│ ├── common.syllabics.json
│ ├── common.roman.json
│ └── [dual-script modules]
└── cr/
└── [dual-script structure]
```
### Key Naming Convention
```
[module].[category].[item]
```
Examples:
- `convert.output.format` - Output format label
- `player.controls.play` - Play button
- `error.file.not_found` - File not found error
- `common.button.ok` - Generic OK button
### Usage in Code
```go
// Primary localization
btn := widget.NewButton(localization.T("convert.start"), onClick)
// Optional generic (whitelisted only)
cancelBtn := widget.NewButton(localization.Generic("Cancel"), onClick)
```
## Localization Rules
### Brand Protection
- **VT**: Never translated, never localized
- **VideoTools**: Translated by meaning only for non-Latin scripts
### Terminology
- **Movie**: Digital files (MP4, MKV, MOV)
- **Film**: Physical media (8mm, 16mm, 35mm)
- Never use these terms interchangeably
### Script Handling
- **Indigenous languages**: Dual-script support (syllabics + romanized)
- **No machine translation** for Indigenous languages
- **Human review required** for all Indigenous translations
## Testing
### Automated Tests
- Translation completeness checking
- Key consistency validation
- UI layout expansion testing (pseudo-languages)
- Script rendering validation
### Manual Tests
- In-context translation verification
- Module-by-module validation
- Language switching functionality
## Contributing
### Translation Guidelines
1. Follow key naming conventions
2. Provide context for ambiguous terms
3. Maintain terminology consistency
4. Include cultural notes where relevant
### Indigenous Languages
- Must include reviewer credit/approval
- Dual-script preferred when possible
- Cultural appropriateness review required
## Configuration
### Language Preference
```json
{
"language": "en-CA",
"secondaryScript": false,
"autoDetect": true
}
```
### Fallback Chain
1. User-selected language
2. User-selected language + secondary script
3. English (en-CA)
4. Emergency fallback string
## Resources
For complete policy details, see: [localization-policy.md](../.opencode/plans/videotools-localization-policy.md)
For module-specific localization guides, see:
- [Convert Module Localization](convert/LOCALIZATION.md)
- [Player Module Localization](../internal/player/LOCALIZATION.md)
- [UI Components Localization](../internal/ui/LOCALIZATION.md)