Languages & dynamic translation¶
KorTTY supports eight built-in languages and can generate translations for any additional language via translation APIs, allowing you to use the interface in your preferred language.
Built-in Languages¶
KorTTY includes full translations for the following languages:
- English (default)
- German
- Italian
- Spanish
- Portuguese
- French
- Croatian
- Dutch
The application automatically detects your system language on first run and loads the matching translation if available. If your system language is not in the built-in list, English is used as a fallback.
Changing Language¶
To switch to a different built-in language:
- Open Settings → Language
- Select the desired language from the dropdown
- Restart the application for the change to take effect
To automatically use your system language:
- Select Auto-detect (System Language) in Settings → Language
- The application will detect your system locale on startup
Dynamic Translation (Additional Languages)¶
You can generate language files for any language supported by a translation API. This allows KorTTY to display its interface in languages beyond the eight built-in options.
Translation Providers¶
KorTTY supports the following translation services:
| Provider | API Key Required | API used | Notes |
|---|---|---|---|
| Google Translate | Yes | Cloud Translation v2 (Basic) | Default, widely available; a plain API key is enough |
| DeepL | Yes | DeepL API v2 | High-quality translations; Free and Pro endpoints are picked automatically |
| LibreTranslate | Optional | LibreTranslate /translate |
Optional for public instances; self-hosted option available |
| Microsoft Translator | Yes | Azure AI Translator v3.0 | Enterprise-grade translations |
| Yandex | Yes | Yandex Cloud Translate v2 | Needs a service account API key from Yandex Cloud, not the retired v1.5 key |
Yandex keys stored by an earlier korTTY version
Yandex stopped issuing keys for the old Translate API v1.5 and switched off the free keys it
had already issued, so no obtainable v1.5 key authenticates any more. korTTY now talks to the
Yandex Cloud Translate v2 endpoint instead, and a v1.5 key stored in an earlier korTTY version
will not work: create a service account in the Yandex Cloud console, give it the
ai.translate.user role, issue an API key for it, and paste that key into
Settings → Translation. If you also filled in the API URL field with the old
translate.yandex.net/api/v1.5/... address, clear it — korTTY ignores that address and logs a
warning until you do.
Generating a Translation¶
To generate translations for a new language:
- Open Settings → Translation
- Choose a Translation API from the dropdown
- Enter your API key if required (the key is stored encrypted with your master password)
- Optionally set a custom API URL (for example, to point to a self-hosted LibreTranslate instance)
- Click Test API Connection to verify the setup works
- Select the target language from the language dropdown
- Click Generate Language File
The generated language file is saved to ~/.kortty/i18n/messages_XX.properties, where XX is the two-letter language code. After generation, restart the application to make the new language available in Settings → Language.
After App Upgrades¶
When KorTTY is upgraded to a new version, previously generated language files are automatically detected as outdated if they were created with an older app version. In Settings → Translation, a notice appears indicating which languages need updating.
To refresh all outdated language files after an upgrade:
- Open Settings → Translation
- Click Regenerate outdated
- All generated languages are re-translated to include new or changed keys from the new version
Regenerating is not urgent: until you do it, any string added after your file was generated falls back to the packaged translation for that language, or to English when the language ships no packaged file. You see a translated or English label, never a raw key name.
Storage and Persistence¶
- Generated language files are stored in
~/.kortty/i18n/ - Each file is a standard Java properties file (messages_XX.properties)
- Files persist across application restarts and updates
- Language files are included in encrypted backups created via Edit → Create Backup
How It Works¶
KorTTY's internationalization system is built around a resource bundle architecture:
- Base language: English strings are defined in
i18n/messages.propertiesbundled with the application - Built-in languages: Pre-translated properties files are packaged with the application
- Dynamic languages: Generated properties files are loaded from
~/.kortty/i18n/on startup - Placeholder preservation: Translation APIs preserve parameterized placeholders like
{0},{1}, and${variable}during translation - Lookup fallback: A file in
~/.kortty/i18n/is consulted first, then the packaged file for the same language, then the English base bundle — so a key the generated file lacks still resolves
The LanguageManager class detects available locales from both built-in translations and dynamically generated files, allowing you to seamlessly mix both types.
Platform Locale Detection¶
KorTTY uses your operating system's locale settings as the default when auto-detect is enabled. The language detection works across platforms:
- macOS: Reads system language from System Preferences
- Windows: Uses Windows language settings
- Linux: Respects the
LANGenvironment variable and system locale settings
If your system's primary language is not in the built-in or generated list, English is automatically selected.
Tips for Translation Quality¶
Optimizing Translation Results
- Shorter chunks: Translation APIs work best with moderately sized strings; KorTTY batches translations in groups of 25 strings
- Placeholder safety: Placeholders (
{0},${var}) are automatically protected during translation and never altered - Test after generation: After generating a new language, review the interface for any awkward phrasing and consider adjusting API providers if quality is insufficient
LibreTranslate Self-Hosting
If you run a self-hosted LibreTranslate instance, you can point KorTTY to it by entering the custom API URL in the translation settings. This avoids API key dependencies and keeps your data local.
Troubleshooting¶
API Connection Issues
If Test API Connection fails, verify: - Your API key is correct and valid - The API provider's service is not experiencing outages - Your network can reach the API endpoint - For custom URLs, ensure the endpoint is reachable and running
Missing Languages After Upgrade
If a generated language file disappears after upgrading KorTTY:
- Check that the file still exists at ~/.kortty/i18n/messages_XX.properties
- Verify that the app version recorded in the file matches the current app version
- Regenerate the language using Settings → Translation → Regenerate outdated if needed