Skip to content

i18n: bring all 17 locale catalogs to 100% key coverage - #1790

Merged
giswqs merged 3 commits into
mainfrom
fix/i18n-catalog-parity
Aug 9, 2026
Merged

i18n: bring all 17 locale catalogs to 100% key coverage#1790
giswqs merged 3 commits into
mainfrom
fix/i18n-catalog-parity

Conversation

@giswqs

@giswqs giswqs commented Aug 9, 2026

Copy link
Copy Markdown
Member

Why

en.json is typed into t() via i18next.d.ts, so a missing or misspelled English key is a compile error. The other 17 catalogs have no such guard: a key absent from de.json silently falls back to English at runtime, and nothing in CI fails. The parity test deliberately reports coverage without asserting it, so catalogs drift behind features and the drift stays invisible until someone runs an audit.

Coverage before this PR was 99 to 100% depending on locale. It is now 100% across the board.

What was missing

Keys Shipped by Missing from
addData.arcgis paging: pageSize, pageSizePlaceholder, maxFeatures, maxFeaturesPlaceholder, pagingHint, loadingProgress, loadingProgressUnknown #1747 all 17 locales
collaborate.shareFailed, comments.post, comments.postShortcutTooltip #1753 all 17 locales
layers.openStylePanel #1775 all 17 locales
toolbar.conversion.rasterTooLargeForBrowser #1748 all 17 locales
printLayout.atlas.maskOutside, maskOutsideHint, printLayout.dataBlocks.filterToAtlasFeature, filterToAtlasFeatureHint #1783 16 locales (fr already had them)
ArcGIS map service, image service, sublayers, rendering rule group (12 keys) #1751 fa only

280 strings in total.

Apparent gaps that are correct as-is, please do not "fix" them

An audit that diffs keys naively will flag these. All are intentional and none are touched here:

  • _one absent from zh, ja, ko, id, th is correct. Those languages have a single CLDR plural category (other). Adding _one would hand i18next a form it can never select.
  • _zero / _two / _few / _many present in ar and ru is correct. English ships only _one and _other; those languages need more. The parity test normalizes plural suffixes before comparing precisely so these do not read as extra keys.
  • A _zero outside a language's CLDR set can still be correct, where en itself defines an explicit _zero override that drops {{count}} (for example map.directionsMode.waypointCount_zero). i18next honors it in every language.

No plural keys are added by this PR, so no CLDR plural set changes.

Translation approach

Each string was written against the sibling keys already in that catalog rather than by a fresh machine pass, so terminology stays internally consistent. Concretely:

  • "features" follows each catalog's established choice (de Objekte, es entidades, fr entités, it elementi, pt feições, nl features, ru объекты, and so on) as used by addData.wfs.maxFeatures and toolbar.conversion.readFeatures.
  • Size units are localized only where the catalog already localizes them: fr "4 Go", ru "4 ГБ", ar "4 غيغابايت", fa "۴ گیگابایت" with Persian numerals, matching addData.serviceLibrary.errorTooLarge. Every other locale keeps ASCII "4 GB".
  • Parenthesis width follows each catalog: zh full-width, ja half-width with no space, ko no space, others spaced.
  • th keeps its existing no-trailing-period sentence style.
  • URL and JSON placeholders (.../MapServer, {"rasterFunction":"Hillshade"}) are carried over verbatim, matching every other locale.
  • fa follows its own vocabulary: سرویس for service, نشانی for URL, کاشی for tiles, شیوهٔ نمایش for style.

The diff is insert-only. Existing lines never move; the 33 deletions are lines that gained a trailing comma.

Verification

  • audit: 100% on all 17 non-English catalogs
  • tests/i18n-catalogs.test.ts, tests/i18n-languages.test.ts, tests/add-data-i18n.test.ts: 62 passed
  • npm run test:frontend: 5524 passed, 0 failed, 1 skipped
  • pre-commit run --files apps/geolibre-desktop/src/i18n/locales/*.json: all hooks pass, including npm build

Review requested

These translations were authored against the existing catalogs' terminology, not by native speakers. docs/i18n.md already frames the non-English catalogs as open to review, so corrections from native speakers on any of these strings are very welcome, particularly the longer explanatory ones such as toolbar.conversion.rasterTooLargeForBrowser and printLayout.dataBlocks.filterToAtlasFeatureHint.

Out of scope

Catalog coverage at 100% does not mean the UI is fully translated. Strings never wrapped in t() render English in every locale and are invisible to the catalogs. A scan finds roughly 73 such strings across 17 components, concentrated in RasterSymbologySection.tsx, ModelBuilderDialog.tsx, ManagePluginsDialog.tsx, and the attribute and processing dialogs. Migrating those is a much larger job (each needs a t() call, an en.json key, and 17 translations), and docs/i18n.md frames i18n as deliberately incremental with English fallback, so it is reported here rather than folded into this PR.

Summary by CodeRabbit

  • Localization
    • Added and updated translations in Arabic, German, Spanish, Persian, French, Hindi, Indonesian, Italian, Japanese, Georgian, Korean, Dutch, Portuguese, Russian, Thai, Turkish, and Chinese.
    • Localized ArcGIS access, loading, pagination, limits, and progress messages.
    • Added translated feedback for collaboration sharing failures, atlas filtering and masking, raster-size limitations, style-panel access, and comment posting.
    • Improved consistency of user-facing messages across supported languages.

en.json is typed into t() so a missing English key is a compile error,
but the other catalogs have no such guard: an absent key silently falls
back to English at runtime and nothing in CI fails. Recent features left
16 keys untranslated across every locale, and fa was additionally missing
the 12 ArcGIS map/image service keys added when that panel grew.

Adds 280 strings:

  - addData.arcgis paging controls (page size, max features, paging hint,
    two loading-progress messages) x 17 locales
  - collaborate.shareFailed, comments.post, comments.postShortcutTooltip,
    layers.openStylePanel, toolbar.conversion.rasterTooLargeForBrowser
  - printLayout atlas mask + data-block atlas filter x 16 locales
    (fr already carried these four)
  - the full ArcGIS map service / image service / sublayers /
    rendering rule group for fa

Translations follow each catalog's existing terminology rather than a
fresh machine pass, and each locale's own conventions: unit names are
localized where that catalog already does so (fr "Go", ru "ГБ",
ar "غيغابايت", fa "گیگابایت" with Persian numerals) and left as ASCII
where it does not, parenthesis width follows zh full-width vs ja
half-width, and th keeps its no-trailing-period sentence style.

No plural keys are involved, so no CLDR plural sets change.
Copilot AI lite review requested due to automatic review settings August 9, 2026 02:08

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5c48ebc1-3463-4b81-b529-8cce3a430798

📥 Commits

Reviewing files that changed from the base of the PR and between 86cd08f and 0d80f5d.

📒 Files selected for processing (1)
  • apps/geolibre-desktop/src/i18n/locales/nl.json

📝 Walkthrough

Walkthrough

Updated 18 desktop locale catalogs with translations for ArcGIS loading, atlas printing, raster limits, collaboration errors, style-panel access, and comment posting.

Changes

Desktop localization updates

Layer / File(s) Summary
ArcGIS loading and pagination strings
apps/geolibre-desktop/src/i18n/locales/*.json
Added translations for ArcGIS access tokens, paging, feature limits, and loading progress.
Atlas and raster messages
apps/geolibre-desktop/src/i18n/locales/*.json
Added translations for atlas filtering, masking, and browser raster-size limitations.
Collaboration, style, and comment strings
apps/geolibre-desktop/src/i18n/locales/*.json
Added translations for collaboration sharing errors, Style panel actions, and comment-posting controls.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: thangqd

Poem

A rabbit adds words to every file,
ArcGIS labels stretch for a mile.
Atlas masks and comments align,
Raster warnings now read fine.
Eighteen locales shine.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: completing key coverage for all 17 locale catalogs.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/i18n-catalog-parity

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🔍 Cloudflare PR preview

Item Value
Site https://3db25870.geolibre-preview.pages.dev
Demo app https://3db25870.geolibre-preview.pages.dev/demo/
Commit 0d80f5d

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Code review

Reviewed all 17 changed locale catalogs (ar, de, es, fa, fr, hi, id, it, ja, ka, ko, nl, pt, ru, th, tr, zh). This is a mechanical, insert-only translation-parity PR (313 additions / 33 comma-only deletions), so I focused on JSON structural correctness, key placement, and interpolation-variable fidelity against en.json rather than deep linguistic review (the PR itself flags translation quality as pending native-speaker review).

Bugs: None found. Every new key name matches its en.json counterpart exactly (pageSize, maxFeatures, pagingHint, loadingProgress(Unknown), shareFailed, filterToAtlasFeature(Hint), maskOutside(Hint), rasterTooLargeForBrowser, openStylePanel, post, postShortcutTooltip, plus the 12 fa-only ArcGIS map/image-service keys), and each insertion is correctly comma-terminated with the pre-existing "last key" gaining a trailing comma, verified across every hunk in the diff. Confidence: high.

Security: None applicable — static JSON string additions, no code execution paths, no injected HTML/URLs beyond the pre-existing verbatim placeholder URLs (e.g. .../MapServer) that already exist elsewhere in these files. Confidence: high.

Performance: N/A — no runtime logic changed. Confidence: high.

Quality: Interpolation tokens ({{loaded}}, {{total}}, {{shortcut}}, {{width}}, {{height}}, {{bands}}, {{compression}}, {{max}}) are preserved verbatim and reordered appropriately per language grammar (e.g. Korean/Turkish/Hindi flip {{total}}/{{loaded}} order) without renaming any variable — a mismatched variable name would silently break interpolation at runtime, and none were found. The renderingRulePlaceholder JSON-in-string ({\"rasterFunction\":\"Hillshade\"}) is escaped identically to en.json in every locale that carries it. Locale-specific typographic conventions called out in the PR body (Thai no trailing period, ja/ko no space before parenthesis, zh full-width parentheses, localized "GB"/"Go"/"ГБ"/"گیگابایت" units) are applied consistently. Confidence: high.

CLAUDE.md: Changes are confined to apps/geolibre-desktop/src/i18n/locales/*.json per the i18n convention in CLAUDE.md; no plural suffixes were added (correctly, since the PR doesn't touch CLDR plural sets), and fr/fa were correctly skipped for keys they already had. No violations found. Confidence: high.

I was unable to execute JSON.parse/json.load in this sandbox to mechanically confirm parse-validity of the full files (all invocations were blocked), so structural correctness here is based on careful manual review of every diff hunk (each insertion point and its surrounding commas/braces) rather than an automated parser run — worth a quick node -e "JSON.parse(...)" sanity pass in CI if not already covered by the referenced tests/i18n-catalogs.test.ts. No inline comments were posted since no defects were found.

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

🔍 GitHub Pages PR preview

Item Value
Site https://opengeos.org/pages-preview/GeoLibre/pr-1790/
Demo app https://opengeos.org/pages-preview/GeoLibre/pr-1790/demo/
Commit 0d80f5d

Note

GitHub Pages built this preview successfully, but its serving edge returned HTTP 403 when checked. The links may still be propagating.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/geolibre-desktop/src/i18n/locales/ar.json`:
- Around line 1610-1611: Update the Arabic maskOutside translation to use
shading or masking terminology that reflects the semi-transparent fill, such as
تظليل المنطقة خارج المعلم الحالي, while leaving maskOutsideHint unchanged.

In `@apps/geolibre-desktop/src/i18n/locales/hi.json`:
- Line 2199: Update the Hindi translation for the rasterTooLargeForBrowser key
so the GeoLibre Desktop instruction uses a conversion verb, conveying “convert
it with the GeoLibre Desktop app” while preserving the existing guidance to
create a COG with gdal_translate or rio-cogeo and keeping it aligned with the
English source semantics.

In `@apps/geolibre-desktop/src/i18n/locales/ka.json`:
- Line 492: Update the Georgian ArcGIS locale entries at pageSize and the
related entry around line 496 to use the established `ობიექტი`/`ობიექტების`
terminology instead of `ჩანაწერი`, while preserving the existing count wording
and interpolation.
- Line 2199: Update the Georgian rasterTooLargeForBrowser translation so
ბრაუზერი is the explicit subject performing the raster decoding, while
preserving the existing WebAssembly memory-limit and conversion guidance.
- Line 1458: Update the `maskOutside` translation value in the Georgian locale
to use the noun form `არეალის`, preserving the rest of the atlas mask label and
its existing meaning.

In `@apps/geolibre-desktop/src/i18n/locales/nl.json`:
- Line 2199: Update the rasterTooLargeForBrowser translation to use the correct
Dutch phrase “het hele raster” instead of “de hele raster,” while preserving the
rest of the message and source wording unchanged.

In `@apps/geolibre-desktop/src/i18n/locales/ru.json`:
- Line 2285: Update the Russian translation value for rasterTooLargeForBrowser
to explicitly state that the browser decodes the entire raster into WebAssembly
memory, which is limited to approximately 4 GB; preserve the existing conversion
guidance for the GeoLibre desktop app, gdal_translate, and rio-cogeo.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ee7b5ec1-f3b5-408a-b6a0-16af35ccdc59

📥 Commits

Reviewing files that changed from the base of the PR and between dc23f9f and cc85f98.

📒 Files selected for processing (17)
  • apps/geolibre-desktop/src/i18n/locales/ar.json
  • apps/geolibre-desktop/src/i18n/locales/de.json
  • apps/geolibre-desktop/src/i18n/locales/es.json
  • apps/geolibre-desktop/src/i18n/locales/fa.json
  • apps/geolibre-desktop/src/i18n/locales/fr.json
  • apps/geolibre-desktop/src/i18n/locales/hi.json
  • apps/geolibre-desktop/src/i18n/locales/id.json
  • apps/geolibre-desktop/src/i18n/locales/it.json
  • apps/geolibre-desktop/src/i18n/locales/ja.json
  • apps/geolibre-desktop/src/i18n/locales/ka.json
  • apps/geolibre-desktop/src/i18n/locales/ko.json
  • apps/geolibre-desktop/src/i18n/locales/nl.json
  • apps/geolibre-desktop/src/i18n/locales/pt.json
  • apps/geolibre-desktop/src/i18n/locales/ru.json
  • apps/geolibre-desktop/src/i18n/locales/th.json
  • apps/geolibre-desktop/src/i18n/locales/tr.json
  • apps/geolibre-desktop/src/i18n/locales/zh.json

Comment thread apps/geolibre-desktop/src/i18n/locales/ar.json Outdated
Comment thread apps/geolibre-desktop/src/i18n/locales/hi.json Outdated
Comment thread apps/geolibre-desktop/src/i18n/locales/ka.json
Comment thread apps/geolibre-desktop/src/i18n/locales/ka.json Outdated
Comment thread apps/geolibre-desktop/src/i18n/locales/ka.json Outdated
Comment thread apps/geolibre-desktop/src/i18n/locales/nl.json Outdated
Comment thread apps/geolibre-desktop/src/i18n/locales/ru.json Outdated
- ar: atlas `maskOutside` said إخفاء ("hide"), implying the area is removed;
  the control paints a translucent inverted fill, so use تظليل ("shade") to
  match the rendered behavior and the existing maskOutsideHint.
- ka: atlas `maskOutside` used the dative არეს where the masdar დანიღბვა
  governs the genitive; use არეალის, which is also the noun already used by
  the neighboring "extentMode": "გვერდის არეალი".
- ka: `rasterTooLargeForBrowser` opened with a referent-less ეს; make
  ბრაუზერი the explicit subject of the decoding.
- hi: `rasterTooLargeForBrowser` said बदलें ("replace"); the English says
  "Convert it with the GeoLibre desktop app", so use रूपांतरित करें, parallel
  with the instrumental से in the following gdal_translate clause.
- nl: raster is a neuter noun, so "de hele raster" -> "het hele raster".
- ru: `rasterTooLargeForBrowser` opened with a referent-less это; state the
  decoding directly and attach the ~4 GB cap to WebAssembly memory.

Not applied: CodeRabbit asked for ka `pageSize`/`pagingHint` to use
ობიექტი instead of ჩანაწერი. en.json deliberately distinguishes "Records per
request" from "Maximum features", and all 17 locales mirror that split
(Datensätze/Registros/Записей/レコード/记录 vs features). Collapsing the two in
ka alone would erase a distinction present in the source.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/geolibre-desktop/src/i18n/locales/nl.json`:
- Line 2199: Update the Dutch translation value for rasterTooLargeForBrowser to
explicitly state that WebAssembly memory is limited to approximately 4 GB and
clearly refer to the raster as too large, avoiding ambiguous pronouns and
preserving the existing conversion guidance.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 78560b9d-6d7a-466b-b182-f6eb748b7576

📥 Commits

Reviewing files that changed from the base of the PR and between cc85f98 and 86cd08f.

📒 Files selected for processing (5)
  • apps/geolibre-desktop/src/i18n/locales/ar.json
  • apps/geolibre-desktop/src/i18n/locales/hi.json
  • apps/geolibre-desktop/src/i18n/locales/ka.json
  • apps/geolibre-desktop/src/i18n/locales/nl.json
  • apps/geolibre-desktop/src/i18n/locales/ru.json

Comment thread apps/geolibre-desktop/src/i18n/locales/nl.json Outdated
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Code review

This PR only adds translation strings to 17 locale JSON catalogs (apps/geolibre-desktop/src/i18n/locales/*.json), bringing each to 100% key parity with en.json. It touches no application logic.

Verification performed:

  • Confirmed the new/changed key set in each locale (pageSize, pageSizePlaceholder, maxFeatures, maxFeaturesPlaceholder, pagingHint, loadingProgress, loadingProgressUnknown, shareFailed, comments.post, comments.postShortcutTooltip, layers.openStylePanel, toolbar.conversion.rasterTooLargeForBrowser, printLayout.atlas.maskOutside/maskOutsideHint, printLayout.dataBlocks.filterToAtlasFeature/filterToAtlasFeatureHint, and the 12 fa-only ArcGIS map/image-service keys) matches exactly what en.json defines, with the same key names and structural placement/ordering.
  • Checked interpolation placeholders ({{loaded}}, {{total}}, {{shortcut}}, and the pre-existing {{width}}/{{height}}/{{bands}}/{{compression}}/{{max}} in unrelated nearby strings) are present and correctly named in every locale that got the new strings — no mismatched or missing template variables.
  • Spot-checked JSON syntax by inspecting full diff hunks for balanced braces/commas across all 17 files (the sandboxed shell in this session couldn't execute node/python to run an automated parse, so this was done by manual inspection of the unified diff context).
  • Verified the "diff is insert-only" and "fr already had the atlas keys" claims in the PR description against the actual diff — both check out (fr's +13/-1 only adds ArcGIS paging, collaborate, layers, comments, and conversion keys, not the atlas/dataBlocks ones already present).
  • Verified the fa-only renderingRulePlaceholder JSON-in-string escaping ({\"rasterFunction\":\"Hillshade\"}) is valid and byte-identical to en.json.
  • Cross-checked the "4 GB" localization-unit claim (ASCII digit + localized unit word for ar, Persian numeral for fa) against the existing precedent string addData.serviceLibrary.errorTooLarge in those same catalogs — consistent with established convention.
  • Confirmed all newly-added keys are actually consumed by application code (useCollaboration.ts, ConversionDialog.tsx, LayerPanel.tsx, PrintLayoutDialog.tsx, AddCommentDialog.tsx), so nothing here is a dead/unused key.

Bugs: None found.

Security: None found — no user input, no code execution, plain JSON string literals.

Performance: None found — this doesn't affect runtime performance (i18next fallback lookups are removed, not added).

Quality: None found — key ordering mirrors en.json, terminology is consistent with each catalog's existing vocabulary, and translation authorship caveats are already transparently disclosed in the PR body (native-speaker review invited).

CLAUDE.md: No violations — this only touches locale catalogs, which docs/i18n.md/CLAUDE.md frame as incrementally maintained and open to community correction; no code paths, build config, or other guarded files are touched.

No inline comments were posted since no defects were identified.

- nl: `rasterTooLargeForBrowser` opened with a referent-less `dit` and
  attached the ~4 GB cap to WebAssembly rather than to its memory. Recast as
  a passive clause with the raster as subject, then a second sentence putting
  the limit on `WebAssembly-geheugen` — the same shape already applied to the
  ru and ka strings in 86cd08f.
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Code review

Reviewed all 17 changed locale JSON files (ar, de, es, fa, fr, hi, id, it, ja, ka, ko, nl, pt, ru, th, tr, zh). This is a translation-only, mechanical parity fix — no application code changed.

Bugs: None found. Cross-checked every added key against en.json's structure and position (nesting, ordering, surrounding keys all line up exactly with the English source), and verified interpolation placeholders ({{loaded}}, {{total}}, {{shortcut}}, etc.) are present and correctly named in every translated string across all 17 locales — no missing or mistyped placeholder that would break i18next interpolation at runtime.

Security: None found. No user-controlled data, no HTML/script content introduced; strings are plain display text.

Performance: N/A — static JSON catalog additions only, no measurable impact.

Quality:

  • Diff hygiene is clean: every insertion correctly appends a trailing comma to the previous last key and leaves the new last key comma-free before the closing brace; no evidence of malformed JSON in any of the 17 hunks (medium confidence, based on manual inspection — I was not able to run a JSON.parse validation pass due to sandbox/tooling restrictions on this run).
  • The fa.json 12-key ArcGIS map/image-service block and the fr.json reduced diff (already had filterToAtlasFeature/maskOutside from fix(print-layout): improve atlas feature framing #1783) both match the PR description's stated gap table exactly.
  • Locale-specific conventions called out in the PR body (Arabic/Russian/Persian unit localization for "4 GB", Persian digit usage, CJK parenthesis width, Thai no-trailing-period style) are all implemented consistently with what's described.
  • Translation phrasing quality itself (naturalness, terminology choice) is outside what I can verify with confidence for most of these languages, but the PR author has already flagged these as machine/self-authored and open to native-speaker review, so no action needed here.

CLAUDE.md adherence: Consistent with the i18n conventions in docs/i18n.md/CLAUDE.md — en.json remains the untouched source of truth, only non-English catalogs were edited, and no code (t() calls, component strings) was touched.

No inline comments were posted — nothing rose to a level worth flagging on specific lines.

@giswqs
giswqs merged commit fcc274e into main Aug 9, 2026
26 checks passed
@giswqs
giswqs deleted the fix/i18n-catalog-parity branch August 9, 2026 03:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants