i18n: translate the auth gate strings and fill the Vietnamese gaps - #1865
Conversation
The Auth0/Clerk sign-in gate (#1853) added eight auth.* keys and the COG DEM terrain source (#1862) added thirteen terrainSettings.* keys, but only en.json carried them, so every other locale fell back to English at runtime. Nothing in CI catches that: the parity test forbids extra keys and placeholder drift, not missing ones. Fill auth.* in all seventeen non-English catalogs, and fill the terrainSettings.* source keys plus the map.directionsMode.waypointCount zero override in vi.json, which shipped one commit before that feature. Also translate six vi strings that were left as English prose. Terminology follows each catalog's existing wording: the noun for 'deployment' is taken from gallery.errorNotConfigured, the sign-in and account vocabulary from share.step1Description, huggingFace.signedInAs and share.openAccountSettings, and 'Try again' from about.tryAgain.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (18)
📝 WalkthroughWalkthroughThe desktop localization files now include authentication strings in 17 locales. The Vietnamese locale also adds or updates translations for desktop requirements, directions, terrain COG sources, Source Coop, Hugging Face, and upload status. ChangesAuthentication locale coverage
Vietnamese locale coverage
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ 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 |
🔍 Cloudflare PR preview
|
Code reviewBugs: None found. All 8 Security: None found. This is a static JSON translation catalog change with no code execution paths, user input handling, or secrets involved. Performance: Not applicable — translation-only JSON additions have no runtime performance impact. Quality:
CLAUDE.md: No violations. This PR only touches I verified the |
🔍 GitHub Pages PR preview
Note GitHub Pages built this preview successfully, but its serving edge returned HTTP 403 when checked. The links may still be propagating. |
Audits the message catalogs against
en.jsonand fills every genuine gap. Alleighteen locales are now at 100% key coverage.
What was missing, and which feature shipped it
auth.unavailableTitle,auth.unavailableDescription,auth.retry,auth.signInTitle,auth.signInDescription,auth.signIn,auth.signOut,auth.accountterrainSettings.sourceLabel,sourceDescription,sourcePlaceholder,localSourceLabel,localSourceDescription,useCog,sourceLoading,restoreDefaultSource,sourceError,sourceErrorEmpty,sourceErrorBand,sourceErrorProjection,sourceErrorDetailvionly, which landed in #1863 one commit earliermap.directionsMode.waypointCount_zerovionlyNothing in CI catches this. The parity test (
tests/i18n-catalogs.test.ts)forbids extra keys and placeholder drift; a key absent from a catalog just
falls back silently to English at runtime.
Six
vivalues were also still English prose rather than translations, so theyare translated here too:
browser.libraryLayerNeedsDesktop,huggingFace.hint,huggingFace.signedInAs,huggingFace.layerUnavailable,sourceCoop.searchPlaceholder,gps.altitudeValue. Every other locale alreadytranslates all six.
Apparent gaps that are correct as-is
Please do not file these as bugs; a naive key diff surfaces them, and "fixing"
either one would be wrong:
zh/ja/ko/id/th/vihave no_oneforms. Thoselanguages have a single CLDR plural category (
other). Adding_onegivesi18next a form it will never select. In particular every one of
vi's ~79plural groups looks like a mismatch against English's
_one/_otherpair andnone of them is.
arandrucarry_zero/_two/_few/_manythat English doesnot. Those are the categories their languages require. The parity test
normalizes plural suffixes before comparing precisely so these do not read as
extra keys.
map.directionsMode.waypointCount_zeroexists outside any single-plurallanguage's CLDR set.
endefines it as an explicit wording override thatdrops
{{count}}entirely ("No waypoints placed yet"), and i18next honors anexplicit
_zeroin every language, so every locale carries it.viwas theone that did not, which is why it is added here.
Terminology
Translated against each catalog's established vocabulary rather than cold, so
the new strings match what is already on screen:
gallery.errorNotConfigured(de Bereitstellung, es implementación, fr déploiement, ru развёртывание,
ja デプロイ, ar النشر, ka განთავსება, th การติดตั้งใช้งาน, and so on)
share.step1Description,huggingFace.signedInAsandshare.openAccountSettings, which keeps eachlocale's existing choice between "sign in" and "log in" wording
about.tryAgain/errorBoundary.tryAgainaddData.common.networkFailureterrainSettings.sourcePlaceholderstayshttps://example.com/dem.tifinvi,matching how every locale leaves example URLs untranslated.
Verification
python3 audit.pyreports 100% for all eighteen locales, no missing keys, noextra keys, no plural-set mismatches
npm run test:frontendpasses (5861 passed, 1 skipped), includingi18n-catalogs,i18n-languagesandadd-data-i18npre-commit run --files apps/geolibre-desktop/src/i18n/locales/*.jsonpasses,including the
npm buildhookvivalues:190 insertions, 6 deletions
Notes for review
These translations were authored against the existing catalogs' terminology,
not by native speakers, so corrections from native speakers are very welcome, in
line with how
docs/i18n.mdalready frames the non-English catalogs.Two things found along the way and deliberately not folded into this PR:
vi.json's top-level key order does not followen.jsonthe way the otherseventeen catalogs do, so a naive merge reshuffles about 4,800 lines. New
keys here were inserted in place to keep the diff readable. Happy to
normalize the ordering in a separate, content-preserving commit if you want
it.
vi.jsoncarries a handful of machine-translation artifacts from its initialimport, for example
planetSwitcher.ioandfileNamePrompt.labelbothholding the Esri File Geodatabase description,
planetSwitcher.titanholdingthe Martin/PostGIS text,
planetSwitcher.mercuryrendered as the metal ratherthan the planet, and
toolbar.conversion.bandOutOfRangeusing ban nhạc(a musical band) for a raster band. Those are value bugs rather than coverage
gaps and want a native speaker pass.
Separately, catalog coverage at 100% does not mean the UI is fully translated:
roughly 73 strings across 17 components are never wrapped in
t()and so renderEnglish in every locale, concentrated in
RasterSymbologySection.tsx,ModelBuilderDialog.tsxandManagePluginsDialog.tsx.docs/i18n.mdframesi18n as deliberately incremental, so that migration is left for its own PR.
Summary by CodeRabbit