acidsugarx/babel.nvim

github github
language
stars 6
issues 2
subscribers 0
forks 0
CREATED

UPDATED


๐ŸŒ babel.nvim

Translate text without leaving Neovim

Neovim Lua License


โœจ Features

  • ๐Ÿ”ค Translate selected text or word under cursor
  • ๐ŸชŸ Multiple display modes (float, picker)
  • ๐Ÿ” Auto-detect installed picker
  • ๐Ÿ“‹ Copy translation to clipboard with y
  • โšก Async translation (non-blocking)

Supported Pickers

Picker Status
Native float โœ…
snacks.nvim โœ…
telescope.nvim โœ…
fzf-lua โœ…
mini.pick โœ…

โšก Requirements

  • Neovim >= 0.9.0
  • curl

Optional (for picker display):

  • snacks.nvim, telescope.nvim, fzf-lua, or mini.pick

๐Ÿ“ฆ Installation

lazy.nvim

{
  "acidsugarx/babel.nvim",
  version = "*", -- recomended for the latest tag, not main
  opts = {
    target = "ru",  -- target language
  },
  keys = {
    { "<leader>tr", mode = "v", desc = "Translate selection" },
    { "<leader>tw", desc = "Translate word" },
  },
}

โš™๏ธ Configuration

Minimal Setup

require("babel").setup({
  target = "ru",
})

Full Options

require("babel").setup({
  source = "auto",        -- source language (auto-detect)
  target = "ru",          -- target language
  provider = "google",    -- translation provider: "google", "deepl"
  display = "float",      -- "float" or "picker"
  picker = "auto",        -- "auto", "telescope", "fzf", "snacks", "mini"
  float = {
    border = "rounded",
    max_width = 80,
    max_height = 20,
  },
  keymaps = {
    translate = "<leader>tr",
    translate_word = "<leader>tw",
  },
  -- DeepL provider settings (optional)
  deepl = {
    api_key = nil,        -- or use DEEPL_API_KEY env variable
    pro = nil,            -- nil = auto-detect, true = Pro, false = Free
    formality = "default", -- "default", "more", "less", "prefer_more", "prefer_less"
  },
})

Options

Option Type Default Description
source string "auto" Source language (auto-detect)
target string "ru" Target language code
provider string "google" Translation provider: "google", "deepl"
display string "float" Display mode: "float" or "picker"
picker string "auto" Picker: "auto", "telescope", "fzf", "snacks", "mini"
deepl.api_key string nil DeepL API key (or use DEEPL_API_KEY env)
deepl.pro boolean nil Force Pro/Free endpoint (nil = auto-detect by key)
deepl.formality string "default" Formality: "default", "more", "less", "prefer_more", "prefer_less"

Language Codes

Code Language
en English
ru Russian
de German
fr French
es Spanish
it Italian
pt Portuguese
zh Chinese
ja Japanese
ko Korean
ar Arabic
hi Hindi
tr Turkish
pl Polish
uk Ukrainian

๐Ÿš€ Usage

Keymaps

Keymap Mode Description
<leader>tr Visual Translate selection
<leader>tw Normal Translate word under cursor

Commands

Command Description
:Babel [text] Translate provided text
:BabelWord Translate word under cursor

In Translation Window

Key Action
q / <Esc> / <CR> Close window
y Copy translation to clipboard
j / k Scroll

๐ŸŒ Providers

Provider Status API Key Notes
Google Translate โœ… No Default, unofficial API
DeepL ๐Ÿงช Yes (free tier) Best quality, 500k chars/month free
LibreTranslate ๐Ÿ”œ No Open source, self-hostable
Yandex ๐Ÿ”œ Yes Great for Russian
Lingva ๐Ÿ”œ No Google proxy, no rate limits

๐Ÿงช Testing: DeepL provider is implemented but needs testing. If you have a DeepL API key and want to help test, please open an issue with your feedback!

  1. Get a free API key at deepl.com/pro#developer (500k chars/month free)

  2. Set up the API key (choose one):

    Option A: Environment variable

    export DEEPL_API_KEY="your-api-key-here"
    

    Option B: In config

    require("babel").setup({
      provider = "deepl",
      deepl = {
        api_key = "your-api-key-here",
      },
    })
    
  3. The endpoint (Free/Pro) is auto-detected from the key suffix (:fx = Free). You can override with deepl.pro = true/false.

  4. If no API key is found, babel.nvim will automatically fall back to Google Translate with a warning.

๐Ÿค Contributing

Contributions are welcome! Feel free to:

  • ๐Ÿ› Report bugs
  • ๐Ÿ’ก Suggest features
  • ๐Ÿ”ง Submit pull requests

๐Ÿ™ Acknowledgments

Thanks to the amazing Neovim plugin ecosystem:

๐Ÿ“ License

MIT ยฉ Ilya Gilev