Skip to content

feat: Add Persian (fa) localization - #53398

Open
m4tinbeigi-official wants to merge 11 commits into
NousResearch:mainfrom
m4tinbeigi-official:feature/persian-translation-clean
Open

feat: Add Persian (fa) localization#53398
m4tinbeigi-official wants to merge 11 commits into
NousResearch:mainfrom
m4tinbeigi-official:feature/persian-translation-clean

Conversation

@m4tinbeigi-official

Copy link
Copy Markdown

Adds full Persian (Farsi) language support for Hermes CLI and gateway messages.

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/cli CLI entry point, hermes_cli/, setup wizard labels Jun 27, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

Cleanest of the three Persian localization PRs (#53394 closed/bundled extra platform plugins, #53396 is a whole-fork push with 2M+ deletions). This 4-file PR is the one to review for fa localization. Related: #53250 (Bale Persian platform), #41454/#41462 (Persian RTL/Bidi).

@tonydwb tonydwb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Code Review Summary

Verdict: Approved

Clean Persian (Farsi) localization PR. Adds "fa" to SUPPORTED_LANGUAGES, Persian name mappings in the language alias dict, and .gitignore entries for Iranian notification platform plugins. Well-scoped with no code logic changes.

Looks Good

  • Localization-only changes (395 additions, 1 deletion)
  • .gitignore entries are reasonable for plugin directories that may exist locally
  • No security concerns
  • No behavioral changes to core logic

Reviewed by Hermes Agent

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for isolating the Persian catalog from the larger related platform work. The feature remains needed: current agent/i18n.py:43-46 has no fa support and current locales/ has no fa.yaml.

Problems

  • locales/fa.yaml is behind current English. locales/en.yaml:106, :254, :360-369, and :385 contain keys absent from the PR catalog. tests/agent/test_i18n.py:44-52 requires exact key parity for every supported locale, so this cannot pass unchanged.
  • The added [Bale Setup](bale.md) link at website/docs/user-guide/messaging/index.md:619 has no target on current main (website/docs/user-guide/messaging/bale.md does not exist).
  • The .gitignore additions ignore plugins/platforms/* source directories; current main tracks platform implementations under that tree.

Suggested changes

  • Synchronize locales/fa.yaml with current locales/en.yaml, preserving placeholders, and add alias coverage for persian, farsi, and fa-IR.
  • Drop the unrelated Bale documentation and platform ignore rules, or land their required implementation/docs as a complete separate change.

Automated hermes-sweeper review.

@@ -618,6 +619,7 @@ Defaults to `false`. Only platforms whose adapter implements `delete_message` ho

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Current main has no website/docs/user-guide/messaging/bale.md, so this link is dead. Please remove it from this localization PR, or land the setup document together with the actual adapter.

Comment thread .gitignore
apps/desktop/demo/

# Ignore Iranian Notification Plugins
plugins/platforms/bale/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

plugins/platforms/ is a tracked source tree for platform adapters. Ignoring these source directories is unrelated to localization and can hide future implementation changes; please remove these ignore rules.

@teknium1 teknium1 added the sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users label Jul 15, 2026

@GottZ GottZ left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This was generated by AI during triage.

Summary

Three PRs address the Persian-localization request. #53394 contains the same fa registration and catalog as #53398 but bundles unrelated platform adapters and documentation; #53396 has no available diff and is identifiable only through destructive-scale metadata and contributor discussion; #53398 is the focused localization candidate, although its current diff includes unrelated Bale and .gitignore changes and an outdated catalog.

Related pull requests

  • #53394 [closed] duplicate — (+1311/-1) — superseded by #53398: The closed PR adds fa registration and the Persian catalog, but also introduces nine unrelated messaging/notification adapters and Bale documentation, making it unnecessarily broad for the localization request.
  • #53396 [closed] duplicate — (+382/-2063635) — remain closed as invalid and duplicate of #53398: No diff is available here, so its actual tree changes cannot be independently characterized; the destructive-scale metadata and contributor discussions describe it as an incoherent whole-fork submission, while identifying #53398 as the focused alternative.
  • #53398 related — (+395/-1) — keep open for revision: The diff directly adds fa, its aliases, and locales/fa.yaml, but the contributor keep_open review notes that the catalog lacks current English keys required by exact-parity tests, the Bale documentation link has no target on main, and the .gitignore rules would hide platform source directories. Remove the unrelated Bale/ignore changes and synchronize catalog keys and placeholders before merge.

Duplicates

#53394 and #53398 contain substantially the same Persian registration and catalog, with #53394 adding unrelated platform work; #53396 is treated as a duplicate of #53398 based on contributor discussion and submission metadata because its diff is unavailable.

Suggested consolidation

Merge #53398 after addressing the contributor keep_open review: update fa.yaml to exact current key/placeholder parity and remove the unrelated Bale documentation and platform-ignore entries. Keep #53394 closed as the over-broad superseded variant and #53396 closed as the metadata- and contributor-identified incoherent duplicate.

Complex graph

flowchart LR
    classDef open fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
    classDef merged fill:#dcfce7,stroke:#15803d,color:#14532d
    classDef closed fill:#e5e7eb,stroke:#6b7280,color:#1f2937
    classDef unverified fill:#f3f4f6,stroke:#9ca3af,color:#374151
    classDef best stroke-width:3px,stroke:#b45309
    classDef target stroke-width:3px,stroke:#4338ca
    subgraph Dup53394 ["PRs duplicating each other"]
        P53394["PR #53394 (closed)"]
        P53396["PR #53396 (closed)"]
        P53398["PR #53398 (open)"]
    end
    class P53394 closed
    class P53396 closed
    class P53398 open
    class P53398 target
    click P53394 "https://github.com/NousResearch/hermes-agent/pull/53394"
    click P53396 "https://github.com/NousResearch/hermes-agent/pull/53396"
    click P53398 "https://github.com/NousResearch/hermes-agent/pull/53398"
Loading

Graph: solid arrow = fixes / best fix, dashed arrow = partial or unverified (see edge label); boxed group = PRs duplicating each other; amber border = best fix; indigo border = target; gray node = closed or no verify verdict yet (state tag in the node label).

Cross-PR triage: Reviewed 3 pull requests and 0 issues in this complex. Diffs were read for 2 of 3 PRs (rest unavailable); Assessment working set: 88 kB of PR diffs, <1 kB of issue/PR text, 4 kB of discussion (6 comments), 2 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch.

@alt-glitch alt-glitch mentioned this pull request Jul 31, 2026
@zaniar-z

zaniar-z commented Aug 5, 2026

Copy link
Copy Markdown

Hi
Do you translate using ai or does the translator translate manually? Because I tested the Gemini 3.6 Flash with my own personal and professional prompts, and it works amazingly well.

سلام
ترجمه رو با استفاده از هوش مصنوعی انجام میدید یا مترجم به صورت دستی ترجمه میکنه
چون من ترجمه gemini 3.6 flash رو با پرامپت های شخصی و حرفه ای خودم تست کردم فوق العاده عمل میکنه

blackorange-mega added a commit to blackorange-mega/hermes-agent that referenced this pull request Aug 14, 2026
Persian is one of the most widely spoken RTL languages, but it was absent
from both GUI catalogs: the desktop app shipped en/zh/zh-hant/ja/ar, and
the dashboard shipped 17 locales with no fa.

Adds a Persian catalog to each front-end and registers it in the existing
RTL sets, so `document.documentElement.dir` flips and Tailwind's logical
utilities mirror the layout. No new CSS — the dashboard's html[dir="rtl"]
rule is already language-agnostic.

Scoped to the two TypeScript GUI catalogs. locales/fa.yaml and the fa entry
in agent/i18n.py are deliberately untouched: that CLI/gateway half is
already covered by the open PR NousResearch#53398, and CONTRIBUTING asks contributors
not to open competing duplicates. The halves are independent and can land
in either order.

Translation notes: {placeholder} tokens and arrow-function signatures are
preserved; brand names, env-var keys, paths, cron expressions, and protocol
terms stay untranslated; Latin digits are used throughout to match ar.ts and
runtime interpolation; ZWNJ is applied where Persian orthography requires
it. Dari (fa-AF) aliases to this catalog rather than falling back to
English.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/cli CLI entry point, hermes_cli/, setup wizard P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants