DE

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:

  1. Open Settings → Language
  2. Select the desired language from the dropdown
  3. 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:

  1. Open Settings → Translation
  2. Choose a Translation API from the dropdown
  3. Enter your API key if required (the key is stored encrypted with your master password)
  4. Optionally set a custom API URL (for example, to point to a self-hosted LibreTranslate instance)
  5. Click Test API Connection to verify the setup works
  6. Select the target language from the language dropdown
  7. 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:

  1. Open Settings → Translation
  2. Click Regenerate outdated
  3. 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.properties bundled 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 LANG environment 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