OmniFetch Translation Contributor Guide¶
Thank you for helping translate OmniFetch! Your contributions help make the app accessible to users worldwide.
Getting Started¶
Prerequisites¶
- Basic understanding of JSON format
- Familiarity with the app's functionality (recommended to use the app first)
- Text editor that supports UTF-8 encoding
Language Support¶
OmniFetch uses iOS's native localisation system. The app automatically detects and uses the device's language setting.
Translation Process¶
Step 1: Get the Template¶
- Download
translation-template.json
from this folder - Create a copy and rename it to your language code (e.g.,
es.json
for Spanish,fr.json
for French)
Step 2: Fill in Metadata¶
Update the _contributor_info
section:
JSON
"language_code": "es", // ISO 639-1 code
"language_name": "Spanish", // Full language name
"contributor_name": "Your Name",
"contributor_email": "optional@email.com",
"completion_date": "2025-01-09"
Step 3: Translate Strings¶
For each translation key:
- Read the
english
value - Consider the
context
provided - Fill in the
value
field with your translation - Respect the
max_length
constraint if specified
Example:
JSON
"save": {
"key": "ui.actions.save",
"english": "Save",
"value": "Guardar", // Your translation here
"context": "Button to save changes",
"max_length": 15
}
Translation Guidelines¶
General Rules¶
- Be Concise: Mobile UI has limited space. Respect max_length constraints.
- Be Consistent: Use the same translation for the same term throughout.
- Keep Product Names: Service names like "Sonarr", "Radarr" should not be translated.
- Technical Terms: Common technical terms (API, URL, etc.) may remain in English if widely understood.
UI Context¶
- Navigation: Keep short (< 20 characters) for tab bars
- Buttons: Action words, imperative mood (< 15 characters)
- Status Messages: Clear and informative (< 30 characters)
- Error Messages: Helpful and user-friendly (< 50 characters)
Specific Considerations¶
Service Names¶
Do NOT translate:
- Sonarr
- Radarr
- Lidarr
- Jellyseerr
- SABnzbd
- NZBGet
- Prowlarr
- Plex
Technical Terms¶
Consider keeping in English if commonly used:
- API Key
- URL
- Port
- Token
Testing Your Translation¶
Developer Testing¶
- Place your translation file in the appropriate .lproj folder
- Build and run the app in Xcode
- Use Debug Menu > Localization to switch languages
- Test all screens and features
String Length Testing¶
- Navigation titles must fit in tab bars
- Button text must not overflow
- Error messages should be readable on small screens
Submitting Your Translation¶
Via GitHub (Preferred)¶
- Fork the OmniFetch repository
- Create a new branch:
translation-[language_code]
- Add your translation files to:
OmniFetch/Resources/[language_code].lproj/
- Create a pull request with:
- Title: "Add [Language] translation"
- Description: Translation coverage percentage and any notes
Via Email¶
Send your completed JSON file to the development team with:
- Subject: "OmniFetch Translation - [Language]"
- Attach the completed JSON file
- Include any notes or questions
Quality Checklist¶
Before submitting, ensure:
- All required fields have translations
- Translations respect max_length constraints
- Service names remain untranslated
- Consistent terminology throughout
- No placeholder text left (e.g., "TODO", "TRANSLATE THIS")
- Metadata section is complete
- File is valid JSON (use jsonlint.com to verify)
Updates and Maintenance¶
Version Updates¶
When new features are added:
- We'll update the template with new strings
- Existing translators will be notified
- Only new/changed strings need updating
Reporting Issues¶
If you find translation issues:
- Open an issue on GitHub
- Specify the language and string key
- Suggest the correction
Common Translations Reference¶
English → Spanish Example¶
Text Only
Save → Guardar
Cancel → Cancelar
Settings → Configuración
Connected → Conectado
Error → Error
Loading... → Cargando...
English → French Example¶
Text Only
Save → Enregistrer
Cancel → Annuler
Settings → Paramètres
Connected → Connecté
Error → Erreur
Loading... → Chargement...
English → German Example¶
Text Only
Save → Speichern
Cancel → Abbrechen
Settings → Einstellungen
Connected → Verbunden
Error → Fehler
Loading... → Laden...
Support¶
Need help with translation?
- Open a GitHub issue with the "translation" label
- Contact the development team
- Join our community discussions
Thank You¶
Your contribution helps make OmniFetch accessible to more users worldwide. We appreciate your time and effort!