A Raycast extension that translates words and short text between languages with the AI provider of your choice — Gemini, Anthropic, OpenAI, or any OpenAI-compatible server — and saves a local translation history to help you build vocabulary over time.
Basic note file, or Quizlet-ready TSVAIza…), Anthropic (sk-ant-…), and OpenAI (sk-…) keys.https://openrouter.ai/api/v1 or http://localhost:11434/v1) and Translation Model. Local servers that need no key accept any value in API Key.| Provider | Default translation model | Pronunciation |
|---|---|---|
| Gemini | gemini-3.5-flash-lite | gemini-3.1-flash-tts-preview |
| Anthropic | claude-haiku-5-5 | macOS system voice |
| OpenAI | gpt-6-luna | gpt-4o-mini-tts |
| OpenAI-compatible | none — set Translation Model | macOS system voice |
OpenAI speech overrides tts-1 and tts-1-hd use the macOS system voice to preserve the selected pronunciation language. Pronunciation is unavailable when that language has no system voice.
API Server URL also routes Gemini, Anthropic, or OpenAI traffic through a proxy or gateway. Your API key is sent to whichever host you configure, so plain http is accepted only for local addresses, and URLs carrying credentials or a query string are rejected.
| Command | Description |
|---|---|
| Translate | Translate a word or short text |
| Translation History | Open your saved translations |
| View Flashcards | Review words you've saved |
English, Ukrainian, Polish, German, French, Spanish, Italian, Portuguese, Dutch, Czech, Swedish, Japanese, Korean, Chinese, Turkish, Russian, Belarusian
| Shortcut | Action |
|---|---|
⌘ C | Copy translation |
⌘ ⇧ L | Pronounce source word |
⌘ ⇧ R | Pronounce translation |
⌘ 1 → ⌘ 5 | Pick a word sense and save it to history |
⌘ ⇧ H | Open History (from Translate) |
⌘ ⇧ T | Toggle source and target languages |
⌘ D | Delete entry (from History) |
⌘ ⇧ D | Clear all history |
⌘ E | Export history as JSON |
⌘ ⇧ A | Export word history for Anki |
⌘ ⇧ Q | Export word history for Quizlet |
Use the Node version pinned in .nvmrc — Node 22.22.2, which bundles npm 10.9.7 and matches the current Raycast extension toolchain. Then run the extension in Raycast dev mode:
nvm use # Node 22.22.2 / npm 10.9.7
npm install
npm run dev
Regenerate
package-lock.jsononly on npm 10.x. npm 11 records optional peer dependencies differently, producing a lockfile that passes locally but fails the store CI'snpm ci.
Built with the Raycast API, TypeScript + React, and Zod for runtime validation. Each provider is a small adapter over plain fetch in src/lib/providers/; the prompt, response validation, and sense de-duplication are shared in src/lib/translation.ts.
Tests run with npm test. The translation quality evals read their keys from .env — copy .env.example to start. npm run eval scores the Gemini provider and needs only GEMINI_API_KEY, which the eval judge also uses; npm run eval:all scores Gemini, Anthropic, and OpenAI side by side and also needs ANTHROPIC_API_KEY and OPENAI_API_KEY.
MIT
Translate a word or text to your target language
Browse your saved translations
Review saved words with spaced repetition
Provider preference left on Auto-Detect, the provider is recognized from your API key.Gemini API Key preference is now API Key, so Raycast asks for your key once after this update. Paste the same Gemini key to keep using Gemini.tts-1 and tts-1-hd models also use the system voice to preserve the selected language. A new Pronunciation preference switches every provider to the macOS system voice. Starting any word or translation pronunciation, or leaving its view, stops speech already playing.formal or literary where one applies. Each element appears only when it exists for that word, so multi-word expressions and languages without a transcription convention simply show less.record as a noun and as a verb — shows the transcription and forms belonging to the sense you picked.Tシャツ in sentences without spaces. Han/kana lookups highlight only their exact text, even beside digits or Latin letters. Highlighting in spaced scripts requires a word boundary before the lookup, so unrelated fragments such as cat inside scatter stay plain.⌘O and ⌘⇧O onto ⌘⇧L for the source word and ⌘⇧R for the translation, in the translate, history, and flashcard views — the old chords are the ones Raycast reserves for Open and Open With.Front / Back file tagged as Anki's Basic note type, with the translation, its part of speech, and both example sentences formatted on the back of the card. Earlier exports used five separate columns, so a note type built from one of those will not line up — import into a fresh deck or remap the fields once.API Server URL preference so translation and pronunciation can be routed through a proxy or gateway, or to an OpenAI-compatible server, where it is required along with Translation Model. Enter a server root or a full API base such as https://openrouter.ai/api/v1. Your API key is sent to the host you configure, so plain http is accepted only for local addresses and credential-bearing URLs are rejected.Translation section where its result will land, and your Recent translations stay on screen instead of the list clearing to an empty placeholder.Reasoning Level preference for translations, defaulting to Minimum for the fastest Gemini responses.Translate, Translation History, and View Flashcards commands, without opening preferences. The selection persists across commands.Source Language / Target Language preferences to Default Source Language / Default Target Language — they now apply until you pick a pair from the dropdown.Translation Model and Text-to-Speech Model preferences so you can point to a newer Gemini model if a default is deprecated.Translate command to translate words and short texts between languages using Gemini.Translation History command to browse saved translations.Flashcards command for spaced-repetition review of saved words (SM-2 algorithm).Gemini API Key, source/target language, and safe clipboard prefill behavior.