Merged
Conversation
* feat: implement translations skill
* feat: self-contained per-language translation agents
Refactor translation pipeline so each per-language sub-agent owns its
full lifecycle (translate → validate → retry → review → refine → merge
→ verify) instead of the orchestrator managing all steps across 9
languages. Reduces orchestrator to a lightweight coordinator that spawns
agents and reads status files.
- Extract shared script-detection utilities into script-utils.js
- Refactor validate.js to import from script-utils.js (no behavior change)
- Add validate-file.js for post-merge full-file validation (JSON validity,
key completeness, aggregate script ratio, regression detection)
- Simplify merge.js: remove duplicate script-validation, add pre-merge
backup for rollback support
- Rewrite SKILL.md Steps 5-8 for self-contained language agent architecture
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* small cleanup fixes
* feat: add missing i18n translations across 9 languages
Translate 11 missing English strings into de, es, fr, ja, pt, ru, tr,
uk, zh using the new /translate Claude Code skill. Covers RFOX FAQ
entries, action center failure messages, and yield cooldown notices.
Also fixes merge.js to only add new keys by default, never overwriting
existing translations. A --force flag is available for intentional
re-translation of changed English strings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* hardening based on review
* fix: address CodeRabbit findings and French elision rule
- Fix glossary key mismatch in compile-report.js (disambiguated keys
didn't match actual glossary.json keys, silently skipping 4 checks)
- Fix mixed Latin/Cyrillic in ru.md locale guide (vы → вы)
- Fix fragile file-path detection in merge.js (use fs.existsSync instead
of includes('/'), add missing-arg guard and JSON.parse try/catch)
- Add try/catch in missing-keys.js for corrupt/missing locale files
- Add French elision rule to fr.md: use "de" when numeric %{amount}
buffers the symbol, use "en" when symbol placeholder is directly
after the preposition (avoids runtime elision ambiguity)
- Retranslate French yield/unstake strings applying the new rule:
"déstaking de %{symbol}" → "déstake en %{symbol}"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add Ukrainian and Turkish placeholder preposition/suffix rules
Ukrainian: в/у and з/із/зі preposition alternation rules for dynamic
placeholders where runtime values are unknown at translation time.
Turkish: vowel harmony rules for dynamic placeholders — prefer
postpositions over direct suffixes on placeholders since crypto symbols
span all vowel classes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: translation pipeline improvements from benchmark findings
- Add register examples to all 9 locale files (de, es, fr, ja, pt, ru, tr, uk, zh) with correct/incorrect pairs for non-pronoun register markers
- Add register consistency as 6th reviewer focus in SKILL.md
- Add "Multichain Snap" and "Snap" to glossary never-translate list
- Fix 2 broken community translations across all 9 locales (stale multiChain.body, missing %{symbol} in getAssets.about)
- Update compile-report.js to use stemMatch instead of raw .includes() for glossary metrics
- Improve stemMatch with language-aware morphological matching (suffix stripping, Levenshtein distance, CJK character overlap)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: benchmark measurement accuracy — strip placeholders, fix Turkish İ/i, add "stake" glossary
Strip %{placeholder} tokens before glossary term matching to eliminate
false positives (e.g. %{tradeFeeSource} triggering "trade" match).
Add locale-aware toLower() for Turkish İ→i case mapping in stemMatch.
Add "stake" glossary entry for root-form matches across locales.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address CodeRabbit review findings — translations and tooling
- Fix Spanish gender agreement: "cantidad quemado" → "cantidad quemada"
- Fix Spanish register inconsistency: align failed messages to formal "Su"
- Fix Ukrainian FAQ title capitalization: "як" → "Як"
- Fix Chinese withdrawal term consistency: "提款" → "提现"
- Fix ja.md wording: "Japanese" → "kanji" for script contrast
- Fix validate.js: emit info-severity glossary flags instead of dropping them
- Fix select-keys.js: persist stale key pruning to disk
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release Notes - v1.1012.0
Production changes - testing required
Ethereal chain integration
Adds Ethereal (Ethena-powered EVM chain, chainId 5064014) as a second-class citizen. Ethereal uses USDe (stablecoin) as its native gas token. Test that Ethereal appears in chain/asset selectors, balances load correctly, and send/receive flows work for Ethereal assets.
Fixes, deps, and infra
Adds test automation attributes to trade page and wallet UI elements. No testing required.
Dev/local only - no production testing required
Agentic chat
Improves fallback behavior for agentic chat when Claude CLI is not available.
Developer tooling
Adds a Claude Code skill to automate i18n translation workflows for developers.