Skip to content

feat(i18n/desktop): add Russian (ru) locale - #42705

Closed
warment wants to merge 1 commit into
NousResearch:mainfrom
warment:feat/desktop-ru-locale
Closed

warment wants to merge 1 commit into
NousResearch:mainfrom
warment:feat/desktop-ru-locale

Conversation

@warment

@warment warment commented Jun 9, 2026

Copy link
Copy Markdown

Summary

Adds full Russian (Русский) locale support to the Hermes Desktop app, making it the fifth available locale alongside English, Simplified Chinese, Traditional Chinese, and Japanese.

Addresses #40347

What's included

  • **** — complete Russian translation (~850 strings) covering all UI surfaces:
    • Common actions (save, cancel, close, etc.)
    • Boot flow and error messages
    • Notifications and update prompts
    • Titlebar controls
    • Settings navigation (Providers, Accounts, API Keys, Tools, Gateway, MCP, Sessions, About)
    • Field labels + descriptions (~60 labels, ~40 descriptions)
    • Composer, Sidebar, Skill descriptions
  • **** — Russian field labels and descriptions for settings pages
  • Locale registration in , ,
  • Aliases: , , ,

Installation (standalone)

For users who want Russian before this is merged:

git clone https://github.com/warment/hermes-desktop-ru.git
cd hermes-desktop-ru
./install.sh

Notes

  • All 15 UI sections fully translated
  • Field labels/descriptions translated via ru-constants.ts (same pattern as constants.ts)
  • Tested on macOS with Hermes Desktop

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for contributing a full Russian Desktop locale. The underlying feature is still needed, but this branch predates major Desktop i18n expansion and needs a focused salvage.

Problems

  • apps/desktop/src/i18n/ru.ts:5 declares a complete Translations object but omits keys required on current main, including common.expand, common.formatJson, and common.tryHint (apps/desktop/src/i18n/types.ts:73-88). Current partial locales use defineLocale() (apps/desktop/src/i18n/ja.ts:3-5) to retain English fallback safely.
  • apps/desktop/src/i18n/ru.ts:283 assigns “Hermes failed to start” to settings.appearance.title; the source key is “Appearance” (apps/desktop/src/i18n/en.ts:382-385). Its adjacent intro is still English at ru.ts:284-285.
  • The locale registration has no corresponding additions to apps/desktop/src/i18n/languages.test.ts or apps/desktop/src/i18n/runtime.test.ts.

Suggested changes

  • Adapt the Russian overrides to the current defineLocale()/current-contract shape, then translate and audit newly added surfaces.
  • Add focused RU alias, runtime, and settings-field-copy coverage.

Automated hermes-sweeper review.

Comment thread apps/desktop/src/i18n/ru.ts Outdated

import type { Translations } from './types'

export const ru: Translations = {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current main has expanded Translations beyond this branch; this complete-object declaration is missing required keys such as common.expand, common.formatJson, and common.tryHint (apps/desktop/src/i18n/types.ts:73-88). Please adapt this locale to the current defineLocale() fallback pattern or complete the current contract.

Comment thread apps/desktop/src/i18n/ru.ts Outdated
system: { label: 'System', description: 'Follow OS appearance' }
},
appearance: {
title: 'Hermes не удалось запустить',

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

settings.appearance.title is the Appearance heading (apps/desktop/src/i18n/en.ts:382-385), but this value translates to “Hermes failed to start.” Please replace it with the correct Russian Appearance label and audit the adjacent stale English intro.

@teknium1 teknium1 added sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users area/i18n Localization, locales, translations labels Jul 14, 2026
@warment
warment force-pushed the feat/desktop-ru-locale branch from 4e9d151 to 49e9eef Compare August 1, 2026 03:27
…ings components (2026-08-01)

- ru.ts: all 38 sections fully translated (~3000 lines)
- ru-constants.ts: all settings field labels
- en/zh/types/catalog/languages: locale registration + new keys
- components: billing, uninstall, computer-use, quick-entry, pet-overlay,
  emoji picker, MoA presets, custom endpoints, star map, timelines, embeds
- rebased on current main
@warment

warment commented Aug 1, 2026

Copy link
Copy Markdown
Author

Status update + reply to the hermes-sweeper review (July 14):

Branch was rebuilt on current main on Aug 1 (49e9eef63, force-pushed after resolving conflicts): the 5 files that changed after v0.19.1 (chat/index, session-tile, profile-switcher, contrib/controller, model-menu-panel) were re-translated manually. The PR is MERGEABLE per GitHub.

Reply to the three review points:

  1. Stale keys (common.expand, common.formatJson, common.tryHint) / defineLocale() — my rebuild predates the new defineLocale() partial-locale contract (ja.ts). I'll rebase onto current main and migrate ru.ts to the defineLocale() shape + current types.ts contract, then add the missing keys. Small, focused follow-up.
  2. settings.appearance.title = "Hermes failed to start" at ru.ts:283 — real bug, will fix (source is "Appearance").
  3. Missing tests (languages.test.ts / runtime.test.ts) — will add RU alias + runtime + settings-field-copy coverage.

Meanwhile the translation is already usable today via the installer (no wait for merge):

curl -sSL https://raw.githubusercontent.com/warment/hermes-agent/main/install.sh | bash
  • Package: v2.0.0-ru-locale release (41 files, ~3000-line ru.ts, 99% of UI)
  • Verified end-to-end: tsc 0 errors, vitest 694 passed, Russian strings confirmed in built app.asar on a clean v0.19.1 install

If merging is planned, I'll do the defineLocale() migration right away.

@gteemass-jpg

Copy link
Copy Markdown

I would like to support PR #42705 and the existing request for official Russian localization of Hermes Desktop.

Dear Hermes Agent / Nous Research Team,

I would like to submit a product proposal that I believe could significantly expand the accessibility and international reach of Hermes Agent:

Please consider adding an official Russian localization to the desktop version of Hermes Agent.

I am a citizen of the Russian Federation and a Russian-speaking user of modern AI technologies. I am also part of a much broader community of people who are genuinely interested in AI agents, automation, software development, and the practical application of artificial intelligence.

Russian is spoken and understood by millions of people far beyond the borders of the Russian Federation. There is a substantial Russian-speaking community of programmers, software engineers, system administrators, AI enthusiasts, entrepreneurs, marketers, designers, researchers, and advanced users.

For many of them, English is sufficient for technical work. But there is an important difference between being able to understand a product and being able to use a sophisticated agent platform comfortably, quickly, and precisely every day.

Hermes Agent is no longer just a simple chatbot interface. It is becoming a serious working environment involving agents, tools, configuration, models, automation, permissions, settings, and increasingly complex workflows.

In such an environment, high-quality native localization matters.

An official Russian interface could:

  • significantly lower the entry barrier for Russian-speaking users;
  • make complex agent functionality easier to understand;
  • reduce configuration errors caused by misunderstanding interface terminology;
  • make Hermes more accessible to users outside the traditional developer community;
  • help Russian-speaking developers introduce Hermes to colleagues and organizations;
  • increase adoption of the desktop application;
  • expand the international Hermes community;
  • create opportunities for Russian-speaking users to produce documentation, tutorials, integrations, workflows, and community support around Hermes.

I would also like to address the obvious geopolitical context directly.

I understand the complexity of the current international situation, including the conflict between Russia and Ukraine, sanctions, regulatory restrictions, and the difficult decisions international technology companies have had to make.

However, language itself is not a government, a political position, or an endorsement of the actions of any state.

Russian is simply the native or primary working language of millions of people.

People do not choose where they are born.

A programmer born in Russia, Ukraine, Kazakhstan, Belarus, Latvia, Estonia, Israel, Germany, the United States, or elsewhere may use Russian as their primary language while having completely different citizenship, political views, backgrounds, and circumstances.

For this reason, I believe that supporting the Russian language should be viewed primarily as an accessibility and internationalization decision rather than a geopolitical one.

Technology has an unusual ability to preserve communication between people even when politics makes that communication increasingly difficult.

The AI community in particular benefits from this.

Russian-speaking engineers and programmers have made substantial contributions to mathematics, computer science, software engineering, cybersecurity, machine learning, infrastructure, and many other technical fields.

Today there is also a large generation of Russian-speaking users who want to understand and build with modern AI agents rather than simply consume them.

Hermes Agent is exactly the kind of project that could benefit from such a technically engaged audience.

Therefore, I would respectfully ask Nous Research to consider one of several possible approaches:

  1. Add Russian as an officially supported language in Hermes Agent Desktop.

  2. Create an official Russian localization package maintained together with the community.

  3. If maintaining the translation internally is impractical, publish an official localization framework that would allow the Russian-speaking community to maintain the translation while Nous Research retains technical control over its integration.

  4. Consider establishing a community translation program for Hermes Agent, with Russian as one of the first additional languages.

I believe the third or fourth approach could be particularly practical.

There are Russian-speaking developers and users who would likely be willing to help translate, review, test, and maintain the localization rather than expecting the entire workload to fall on the Nous Research team.

Personally, I would be interested in contributing to such an initiative if community participation were welcomed.

My request is therefore not simply:

“Please translate Hermes into Russian.”

It is:

Please give the Russian-speaking technology community an official and legitimate way to help make Hermes Agent accessible in Russian.

Even during an extraordinarily difficult period in international relations, such a decision would send a valuable message: access to knowledge, programming, engineering, and artificial intelligence can remain a space for cooperation between individuals.

Countries have borders.

Technology communities do not always need to inherit them.

Thank you for considering this proposal and for the work your team is doing on Hermes Agent.

I would be grateful if this suggestion could be forwarded to the team responsible for Hermes Agent Desktop, product development, internationalization/localization, or community development.

Kind regards,

Artem
Russian-speaking Hermes Agent user

@teknium1

teknium1 commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Russian Desktop locale landed on main via #100429 (SHA a922dad + 269e5bd). Your PR was the EARLIEST submission of this feature (Jun 9) and is credited first in the merged PR body — unfortunately this branch carried a large unrelated diff (+4298/−260 across ~35 files) and couldn't be salvaged directly; @FASTCHIP's #91780 implementation was cherry-picked as the base. Closing as completed — thank you for kicking this off!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/i18n Localization, locales, translations P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants