Files
vectorcraft/docs/localization-hi.md
T
dotCooCoo d5e2a95403 i18n: Hindi rows no longer keep English words or garble their sentences
264 Hindi rows kept English words in a Hindi sentence ("or", "give",
"see"), dropped the word that names what is wrong ("unknown align" read
as "unknown `left`"), reversed a condition ("not editing an opacity
mask" read as "do not edit an opacity mask"), translated enum values the
command reads in English, broke a list of accepted values
("(vertical|horizontal|free)" read as "(vertical Chhorizontal
Chlorfree)"), or repeated a parameter as a "size: आकार" prefix. Each row
now says what its English says, with parameter names, enum values,
placeholders and value lists unchanged, and "positive" reads धनात्मक.

Two tests check every row: no English connecting word outside
backticks, quotes, braces and brackets, and every `a|b|c` list of an
`@msg` row kept as written.
2026-11-13 13:21:38 -08:00

123 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hindi interface terminology and verification
The `hi` catalog is a machine-assisted Hindi draft written from VectorCraft's English strings.
It starts from matching entries in PhotoCraft's clean-room Hindi catalog. VectorCraft's current
loanword preferences below take precedence over that starting vocabulary.
The remaining drafts used the local Argos English–Hindi 1.1 model, followed by an agent wording
pass on commands, vector vocabulary, counted messages, warnings and diagnostic identifiers.
The contributor is a native Hindi speaker and approved the loanword preferences below. This
records terminology feedback, not an independent native proofread of every row. No proprietary
localization resources were used; coverage tests alone do not establish translation quality.
## Style
Prefer familiar design-app loanwords, as requested by the contributor: Save is सेव, Save As is
सेव ऐज़…, a vector path is पाथ (never पाठ), text is टेक्स्ट, a document is डॉक्यूमेंट,
preview is प्रीव्यू and workspace is वर्कस्पेस. The contributor also approved सिलेक्शन,
प्रॉपर्टीज़, ऑप्शन्स and ओपन. Keep Hindi sentence structure and auxiliaries;
use सेव करें within a sentence. Keep nukta in फ़ाइल/फ़ॉन्ट/ज़ूम and -एँ in हटाएँ/दिखाएँ.
Retain ASCII digits, unit symbols, keyboard shortcuts and product/format names. Command IDs,
parameter names, enum values and numbers in diagnostics must stay exactly as supplied.
Keep fragment edge spaces: the hint bar assembles sentences from separately translated pieces.
The built-in workspace and perspective preset names stay in English, as in the other catalogs.
Hindi integer counts use the first plural form for 0 and 1 and the second for 2+ (`plural_french`).
Both `@plural` and `@msgplural` rows have two forms. The latter translate status messages when
displayed; the engine, control channel and MCP continue to return English messages.
In diagnostics, "a number of points" is a numeric value in the point unit: write संख्या and
पॉइंट, never कई अंक ("many digits"). Keep every bound and alternative the English lists, and
every clause such as "all" or "what follows it". Type as a text object is टाइप (एरिया टाइप,
पॉइंट टाइप), not प्रकार, which stays for a kind. `hindi_rows_use_the_glossary_term_for_what_their_english_names`
in `crates/ui-egui/src/i18n/tests.rs` checks the save, swatch, crop, resolution and path terms
and the point unit in every row.
A variable is वेरिएबल (plural वेरिएबल्स) in every sense: a data-merge variable and the
variable library, a variable font, a variable stroke width and an environment variable. It is
never चर, परिवर्तनीय or वैरिएबल. Joining paths, anchor points, point type or the lines of a
paragraph is जोड़ें (जोड़ने के लिए in a purpose clause); शामिल हों is kept for joining the
community. The stroke corner names (Bevel Join, Miter Join, Round Join) and the Join tool keep
जॉइन. `hindi_rows_use_one_term_for_a_variable_and_for_joining_paths` checks both terms in every
row.
A sentence keeps no English connecting word such as "or", "must" or "give": write या, होना
चाहिए and दें. Parameter names, enum values and command IDs stay in English, and a list of
accepted values such as `(left|right|top|bottom)` keeps the English's spelling and its `|`
separators. `hindi_rows_keep_no_english_words_in_their_sentences` checks every row outside
backticks, quotes, braces and brackets, and `hindi_messages_keep_their_lists_of_accepted_values`
checks every `@msg` row's lists.
## Terminology
| English | Hindi |
|---|---|
| Layer / Layers | लेयर / लेयर्स |
| Object | ऑब्जेक्ट |
| Selection / Select | सिलेक्शन / सिलेक्ट |
| Properties / Options / Open | प्रॉपर्टीज़ / ऑप्शन्स / ओपन |
| Shape (vector) | शेप |
| Shape (generic form) | आकार |
| Artboard | आर्टबोर्ड |
| Artwork | आर्टवर्क |
| Path / Anchor point / Handle | पाथ / एंकर पॉइंट / हैंडल |
| File path on disk | फ़ाइल पाथ |
| Fill / Stroke | फ़िल / स्ट्रोक |
| Gradient / Mesh / Blend | ग्रेडिएंट / मेश / ब्लेंड |
| Pattern / Swatch | पैटर्न / स्वॉच |
| Type (text object) / Crop / Resolution | टाइप / क्रॉप / रिज़ॉल्यूशन |
| Appearance / Graphic style | अपीयरेंस / ग्राफ़िक स्टाइल |
| Symbol / Envelope | सिंबल / एन्वेलप |
| Variable / Variables / Variable library | वेरिएबल / वेरिएबल्स / वेरिएबल लाइब्रेरी |
| Join (paths, points, type, lines) | जोड़ें |
| Clipping mask / Opacity mask | क्लिपिंग मास्क / ओपेसिटी मास्क |
| Image Trace / Live Paint | इमेज ट्रेस / लाइव पेंट |
| Shape Builder / Pathfinder | शेप बिल्डर / पाथफ़ाइंडर |
| Kerning / Leading / Tracking | कर्निंग / लीडिंग / ट्रैकिंग |
| Character / Paragraph | कैरेक्टर / पैराग्राफ़ |
| Save / Save As | सेव / सेव ऐज़… |
| Document / Text | डॉक्यूमेंट / टेक्स्ट |
| Preferences / Workspace | प्रेफ़रेंसेज़ / वर्कस्पेस |
| Preview / Opacity | प्रीव्यू / ओपेसिटी |
| W / H / X / Y | W / H / X / Y |
## Scope and checks (2026-11-06)
The draft has 7,877 unique rows, including 2,537 `@msg`, 45 `@msgplural` and 38 `@plural` rows.
Its source set combines the sibling catalogs with the current test scanner's UI/undo and error
message dumps, so it includes runtime labels outside the literal scanner. Row count is not a
percentage of the application's entire interface.
On 2026-11-13 the catalog has 8,782 rows, including 3,014 `@msg`, 47 `@msgplural` and 41
`@plural` rows. A wording pass on that date corrected 193 rows outside the plug-in
messages for meaning, dropped clauses, English left in place and the save, swatch, crop,
resolution, path and type terms. It is not a native proofread.
The comparison covers release `v0.21.1` (`f6aa4309`) and current `main` (`3c7d9e1f`). Their
non-English catalogs have no missing Hindi keys except the names deliberately kept in English.
A separate scan of the release's `tl!` literals checks strings beyond its catalogs. Current
main added paragraph labels, spine-index validation and two error messages: six rows in total.
Main's workspace version is still 0.21.0; this PR does not change release versioning.
`cargo test -p vectorcraft-ui-egui --lib i18n::tests` passes all 55 tests in Ubuntu 24.04 (WSL).
The untranslated report has no Hindi section, meaning it found no missing Hindi rows among the
categories it checks. This does not check dynamically assembled strings that the scanners miss.
Additional checks compare placeholders, backtick-delimited identifiers and numeric values.
The native Hindi UI fallback test also passes with the installed Nirmala UI font. A running
desktop preview was checked in Hindi, including the New Document dialog and File menu.
The final `cargo xtask ci` passed all 12 stages in Ubuntu 24.04 (WSL): formatting, workspace
clippy, workspace tests, doctests, no-bundled-fonts, PDF dependencies, assets, brands, cursors,
the translation report, layers and WebAssembly. The language picker keeps each language's own
name, including English; its native-menu regression passed with the final catalog.
## Fonts and remaining review
The pinned egui fork shapes Devanagari with HarfRust. The desktop's existing `UiFonts` loader
finds an installed covering face, such as Nirmala UI, Kohinoor Devanagari or Noto Sans Devanagari.
If a `CRAFT_FONTS_DIR` build includes a face tagged `Deva`, it is also installed at the end of
each UI font family. No font binaries are added to this repository. Without either an embedded
or installed covering face, Hindi cannot display correctly. The web has no system fonts and
needs a Devanagari face supplied through craft-fonts; this catalog alone does not supply one.
Before release: native-speaker review of the draft (especially less common labels and error
messages), visual checks for clipped labels and matras at different UI scales, and a web-font
build. Reviewers should use this glossary to make terminology corrections consistently.