# What Languages Does OpenSuperWhisper Support? Complete Language Guide and Technical Reference

> Discover the full range of languages OpenSuperWhisper supports. Explore its capabilities with Whisper, Parakeet v3, and Parakeet v2 in our comprehensive language guide.

- Repository: [Starmel/OpenSuperWhisper](https://github.com/Starmel/OpenSuperWhisper)
- Tags: api-reference
- Published: 2026-07-07

---

**OpenSuperWhisper supports 21 languages when using the Whisper engine (including auto-detection), 25 European languages with Parakeet v3, and English-only with Parakeet v2**, with language availability determined by the `supportedLanguages(engine:fluidAudioModelVersion:)` method in [`LanguageUtil.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/LanguageUtil.swift).

OpenSuperWhisper is a macOS transcription application that leverages multiple speech recognition engines to convert speech to text. Its multilingual capabilities are centralized in a dedicated utility module that maps language codes to human-readable names and filters availability based on your selected engine and model version.

## Language Configuration in LanguageUtil.swift

The [`OpenSuperWhisper/Utils/LanguageUtil.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/OpenSuperWhisper/Utils/LanguageUtil.swift) file serves as the single source of truth for all language support. This module defines three critical static properties that determine what languages are available:

- **`availableLanguages`** – The complete set of 21 language codes supported by the Whisper engine, including `"auto"` for automatic detection
- **`parakeetV2Languages`** – The restricted set containing only `"en"` (English) for FluidAudio v2 models
- **`parakeetV3Languages`** – The expanded set of 25 European language codes for FluidAudio v3 models

The file also maintains a **`languageNames`** dictionary that maps each ISO code to its human-readable equivalent (e.g., `"en"` → `"English"`, `"ja"` → `"Japanese"`).

## Engine-Specific Language Support

OpenSuperWhisper dynamically adjusts available languages based on which transcription engine is active. The static method `supportedLanguages(engine:fluidAudioModelVersion:)` returns the appropriate array for your configuration.

### Whisper Engine (Full Multilingual Support)

When using the Whisper engine, the app exposes the full `availableLanguages` array. This includes the `"auto"` option plus 20 specific language codes:

- **Asian languages**: Chinese (`zh`), Japanese (`ja`), Korean (`ko`), Hindi (`hi`), Indonesian (`id`)
- **European languages**: German (`de`), Spanish (`es`), French (`fr`), Italian (`it`), Portuguese (`pt`), Russian (`ru`), Polish (`pl`), Dutch (`nl`), Catalan (`ca`), Swedish (`sv`), Finnish (`fi`), Turkish (`tr`)
- **Middle Eastern languages**: Arabic (`ar`), Hebrew (`he`)
- **English**: (`en`)

Selecting `"auto"` sets the `detectLanguage` flag to `true` in `WhisperFullParams`, allowing the Whisper C library to identify the spoken language automatically.

### Parakeet v2 (English Only)

The FluidAudio v2 model restricts output to English exclusively. The `parakeetV2Languages` array contains only `"en"`, and the UI filters out all other options when this model version is detected.

### Parakeet v3 (25 European Languages)

The v3 model expands support to 25 languages, though it remains limited to European variants. The supported codes are:

- **Germanic**: English (`en`), German (`de`), Dutch (`nl`), Swedish (`sv`), Danish (`da`), Finnish (`fi`)
- **Romance**: Spanish (`es`), French (`fr`), Portuguese (`pt`), Italian (`it`), Romanian (`ro`)
- **Slavic**: Russian (`ru`), Polish (`pl`), Bulgarian (`bg`), Croatian (`hr`), Czech (`cs`), Slovak (`sk`), Slovenian (`sl`), Ukrainian (`uk`)
- **Baltic**: Latvian (`lv`), Lithuanian (`lt`)
- **Other European**: Greek (`el`), Estonian (`et`), Hungarian (`hu`), Maltese (`mt`)

## Implementing Language Selection

The [`OpenSuperWhisper/Settings.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/OpenSuperWhisper/Settings.swift) file consumes the `supportedLanguages` method to populate the user interface. When building the language menu, it iterates through the returned codes and displays friendly names via `LanguageUtil.languageNames[code]`.

When a user selects an entry, the code writes the chosen value to `AppPreferences.shared.whisperLanguage`. This preference persists across sessions and feeds directly into the transcription parameters.

## Configuring Transcription Parameters

When initializing a transcription job, [`OpenSuperWhisper/Whis/WhisperFullParams.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/OpenSuperWhisper/Whis/WhisperFullParams.swift) receives the selected language code. The struct holds two relevant properties:

- **`language`**: A `String?` containing the ISO code (e.g., `"ja"`) or `nil` for auto-detection
- **`detectLanguage`**: A `Bool` that tells the Whisper C library whether to identify the language on-the-fly

Setting an explicit language code while setting `detectLanguage = false` forces transcription in that specific language. Conversely, leaving `language` as `nil` with `detectLanguage = true` enables automatic language identification.

## Practical Code Examples

Retrieve the appropriate language list for your current engine configuration:

```swift
// Determine available languages based on engine and model version
let engine = "whisper"               // or "fluidaudio"
let fluidAudioVersion = "v3"         // ignored for Whisper engine
let supportedLangs = LanguageUtil.supportedLanguages(
    engine: engine,
    fluidAudioModelVersion: fluidAudioVersion
)
// Returns: ["auto", "en", "zh", "de", "es", ...] for Whisper
// Returns: ["en", "de", "es", ...] for Parakeet v3
// Returns: ["en"] for Parakeet v2

```

Display a human-readable language menu:

```swift
// Build UI menu with friendly names
for code in supportedLangs {
    let displayName = LanguageUtil.languageNames[code] ?? code
    print("\(code) → \(displayName)")
}

```

Configure transcription parameters for a specific language:

```swift
// Force Japanese transcription (no auto-detection)
var params = WhisperFullParams()
params.language = "ja"          // Set specific language code
params.detectLanguage = false   // Disable auto-detection
// Pass params to the Whisper engine...

```

## Summary

- Language support is centralized in [`OpenSuperWhisper/Utils/LanguageUtil.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/OpenSuperWhisper/Utils/LanguageUtil.swift) with three distinct arrays for different engine configurations
- The Whisper engine supports 21 languages plus auto-detection via the `"auto"` code
- Parakeet v2 is restricted to English only, while Parakeet v3 supports 25 European languages
- The Settings UI dynamically filters available options by calling `supportedLanguages(engine:fluidAudioModelVersion:)`
- Selected languages are passed to the underlying C library through [`WhisperFullParams.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/WhisperFullParams.swift) with the `language` and `detectLanguage` properties

## Frequently Asked Questions

### Does OpenSuperWhisper support automatic language detection?

Yes, but only when using the Whisper engine. Selecting the `"auto"` option from `availableLanguages` sets `detectLanguage = true` in `WhisperFullParams`, which instructs the Whisper C library to identify the spoken language automatically at the start of transcription.

### Why can't I select Japanese when using the Parakeet engine?

Parakeet v3 supports only European languages, and Parakeet v2 supports only English. Japanese (`ja`) is available exclusively through the Whisper engine, as defined in the `availableLanguages` array versus the restricted `parakeetV3Languages` set in [`LanguageUtil.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/LanguageUtil.swift).

### How does the app switch between different language sets?

The app switches automatically based on your engine selection in Settings. Calling `LanguageUtil.supportedLanguages(engine:fluidAudioModelVersion:)` returns the correct subset for your configuration, which [`Settings.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/Settings.swift) uses to rebuild the language menu dynamically without requiring app restarts.

### Where are the human-readable language names defined?

Human-readable names are mapped in the `languageNames` dictionary within [`OpenSuperWhisper/Utils/LanguageUtil.swift`](https://github.com/Starmel/OpenSuperWhisper/blob/main/OpenSuperWhisper/Utils/LanguageUtil.swift). The Settings UI references this dictionary to display "English" instead of the raw code "en" when populating the language selection submenu.