Skip to main content
Fresh supports multiple languages for its user interface. The editor automatically detects your system locale, but you can also set your preferred language manually.

Supported Languages

Fresh currently supports the following locales:

English

en - English (default)

Chinese (Simplified)

zh-CN - 简体中文

Japanese

ja - 日本語

Spanish

es - Español

French

fr - Français

German

de - Deutsch

Italian

it - Italiano

Portuguese (Brazilian)

pt-BR - Português (Brasil)

Russian

ru - Русский

Korean

ko - 한국어

Vietnamese

vi - Tiếng Việt

Thai

th - ไทย

Ukrainian

uk - Українська

Czech

cs - Čeština
The complete list of locale files is available in the locales directory of the Fresh repository.

Setting Your Language

There are three ways to configure your preferred language:

1. Using the Settings UI

The easiest method:
1

Open Settings

Navigate to Edit → Settings… from the menu bar.
2

Find Language Setting

Go to the General section.
3

Select Locale

Choose your preferred language from the dropdown.
4

Restart Fresh

Changes take effect after restarting the editor.

2. Configuration File

Edit your ~/.config/fresh/config.json:
{
  "locale": "es"
}
Restart Fresh for the changes to take effect.

3. Command-Line Flag

Override the locale for a single session:
fresh --locale ja
fresh --locale zh-CN
This takes precedence over the configuration file setting.

Locale Priority

Fresh determines the active locale using this priority order (highest to lowest):
  1. Command-line flag: --locale <LOCALE>
  2. Configuration file: "locale": "<LOCALE>" in config.json
  3. System locale: Detected from LANG environment variable
  4. Default fallback: en (English)
Fresh reads the LANG environment variable to detect your system locale:
echo $LANG
# Example output: ja_JP.UTF-8, es_ES.UTF-8, etc.
The language code is extracted from the locale string (e.g., ja from ja_JP.UTF-8).

What Gets Translated

When you change the locale, the following UI elements are translated:
  • Menu bar - All menu labels and items
  • Command palette - Command names and descriptions
  • Status bar - Status messages and indicators
  • Prompts - File open, save, search dialogs
  • Error messages - User-facing error text
  • Settings UI - Setting labels and descriptions
  • Help text - In-app documentation
What doesn’t change:
  • Your file contents (obviously!)
  • Plugin-provided text (unless the plugin supports i18n)
  • LSP messages from language servers
  • Log files and debug output

Plugin Translations

Plugins can provide their own translations to match your selected locale.

For Plugin Users

Plugins that support i18n will automatically use your configured locale. No additional setup required!

For Plugin Developers

To add translations to your plugin:
  1. Create .i18n.json files alongside your plugin:
    ~/.config/fresh/plugins/my-plugin/
    ├── plugin.json
    ├── main.js
    ├── en.i18n.json
    ├── ja.i18n.json
    └── es.i18n.json
    
  2. Structure your translation files:
    {
      "command.my_action": "My Action",
      "message.success": "Operation completed successfully",
      "error.not_found": "Item not found"
    }
    
  3. Use translations in your plugin code:
    const message = fresh.t("message.success");
    
Fresh will automatically load the appropriate translation file based on the active locale.

Contributing Translations

Want to add or improve a translation?
1

Find the Locale File

Locale files are in the Fresh repository:crates/fresh-editor/locales/<locale>.json
2

Edit or Create

  • To improve existing: Edit the .json file
  • To add new language: Copy en.json and translate all strings
3

Test

Build Fresh and test your translations:
cargo run --bin fresh -- --locale <your-locale>
4

Submit

Create a pull request with your changes.

Translation Guidelines

  • Keep it concise - UI space is limited in a terminal
  • Match tone - Fresh uses friendly, direct language
  • Test in context - See how translations appear in menus and prompts
  • Preserve placeholders - Variables like {file} must remain unchanged
  • Check key bindings - Some terms reference keyboard shortcuts

Encoding vs. Locale

Don’t confuse locale with file encoding!
  • Locale (i18n): UI language (menus, messages)
  • Encoding: How file bytes are interpreted (UTF-8, GBK, etc.)
For file encoding support, see:

Examples

fresh --locale ja

Troubleshooting

Translations Not Appearing

  1. Verify locale code - Check spelling (e.g., zh-CN not zh-cn)
  2. Restart Fresh - Locale changes require restart
  3. Check config syntax - Ensure config.json is valid JSON
  4. View effective config:
    fresh --cmd config show | grep locale
    

Mixed Language UI

If some parts are translated but others aren’t:
  • Normal: Some dynamic content (like plugin text) may not be translated
  • LSP messages: Language servers send messages in their own language
  • Incomplete translation: Some strings may not be translated yet - consider contributing!

See Also

Build docs developers (and LLMs) love