feat: Add Persian (fa) localization - #53398
Conversation
feat: add Bale messenger platform plugin
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 |
tonydwb
left a comment
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
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.yamlis behind current English.locales/en.yaml:106,:254,:360-369, and:385contain keys absent from the PR catalog.tests/agent/test_i18n.py:44-52requires exact key parity for every supported locale, so this cannot pass unchanged.- The added
[Bale Setup](bale.md)link atwebsite/docs/user-guide/messaging/index.md:619has no target on current main (website/docs/user-guide/messaging/bale.mddoes not exist). - The
.gitignoreadditions ignoreplugins/platforms/*source directories; current main tracks platform implementations under that tree.
Suggested changes
- Synchronize
locales/fa.yamlwith currentlocales/en.yaml, preserving placeholders, and add alias coverage forpersian,farsi, andfa-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 | |||
|
|
|||
There was a problem hiding this comment.
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.
| apps/desktop/demo/ | ||
|
|
||
| # Ignore Iranian Notification Plugins | ||
| plugins/platforms/bale/ |
There was a problem hiding this comment.
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.
GottZ
left a comment
There was a problem hiding this comment.
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 addsfaregistration 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 addsfa, its aliases, andlocales/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.gitignorerules 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"
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.
|
Hi سلام |
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.
Adds full Persian (Farsi) language support for Hermes CLI and gateway messages.