Thank you for helping translate Parrot! This guide explains how to add or improve translations.
- Fork the repository
- Copy the English translation file to your language folder
- Translate the values (not the keys!)
- Submit a pull request
Translation files are located in:
src/i18n/locales/
├── en/
│ └── translation.json # English (source)
├── vi/
│ └── translation.json # Vietnamese
├── fr/
│ └── translation.json # French
└── [your-language]/
└── translation.json # Your contribution!
Create a new folder using the ISO 639-1 language code:
mkdir src/i18n/locales/[language-code]Examples:
defor Germanesfor Spanishjafor Japanesezhfor Chinesekofor Koreanptfor Portuguese
cp src/i18n/locales/en/translation.json src/i18n/locales/[language-code]/translation.jsonOpen the file and translate only the values (right side), not the keys (left side):
{
"sidebar": {
"general": "General", // ← Translate this value
"advanced": "Advanced", // ← Translate this value
...
}
}Important:
- Keep all keys exactly the same
- Preserve any
{{variables}}in the text (e.g.,{{error}},{{model}}) - Keep the JSON structure and formatting intact
Edit src/i18n/languages.ts and add your language metadata:
export const LANGUAGE_METADATA: Record<
string,
{ name: string; nativeName: string }
> = {
en: { name: "English", nativeName: "English" },
es: { name: "Spanish", nativeName: "Español" },
fr: { name: "French", nativeName: "Français" },
vi: { name: "Vietnamese", nativeName: "Tiếng Việt" },
de: { name: "German", nativeName: "Deutsch" }, // ← Add your language
};- Run the app:
bun run tauri dev - Go to Settings → General → App Language
- Select your language
- Verify all text displays correctly
- Commit your changes
- Push to your fork
- Open a pull request with:
- Language name in the title (e.g., "Add German translation")
- Any notes about the translation
Found a typo or better translation?
- Edit the relevant
translation.jsonfile - Submit a PR with a brief description of the change
- Use natural, native-sounding language
- Keep translations concise (UI space is limited)
- Match the tone of the English text (friendly, clear)
- Preserve technical terms when appropriate (e.g., "API", "GPU")
- Translate brand names (Parrot, Kokoro)
- Change or remove
{{variables}} - Modify JSON keys
- Add extra spaces or formatting
Some strings contain variables like {{error}} or {{model}}. Keep these exactly as-is:
// English
"downloadModel": "Failed to download model: {{error}}"
// French (correct)
"downloadModel": "Échec du téléchargement du modèle : {{error}}"
// French (incorrect - don't translate the variable!)
"downloadModel": "Échec du téléchargement du modèle : {{erreur}}"Some languages have complex plural rules. For now, use a general form that works for all cases. We may add proper plural support in the future.
- Open an issue on GitHub
- Join the discussion in existing translation PRs
| Language | Code | Status |
|---|---|---|
| English | en |
Complete (source) |
| Arabic | ar |
Complete |
| Chinese (Simplified) | zh |
Complete |
| Chinese (Traditional) | zh-TW |
Complete |
| Czech | cs |
Complete |
| French | fr |
Complete |
| German | de |
Complete |
| Italian | it |
Complete |
| Japanese | ja |
Complete |
| Korean | ko |
Complete |
| Polish | pl |
Complete |
| Portuguese | pt |
Complete |
| Russian | ru |
Complete |
| Spanish | es |
Complete |
| Turkish | tr |
Complete |
| Ukrainian | uk |
Complete |
| Vietnamese | vi |
Complete |
Thank you for making Parrot accessible to more people around the world!