untranslated_report lists 167 status and error messages that no
complete-message catalog translates. zh-hans.tsv gains 114 @msg rows for
the ones no open pull request covers: 3D and Revolve limits, image export
and encoding errors, color profiles, color books and swatch exchange
files, binary DXF and DWG import, path operations, swatch, graphic style
and action set libraries, and zip, script and regular expression errors.
Placeholders, backticked names, command ids and listed values stay as the
English writes them.
The other 53 (composite fonts, SVG filters, read roots and graph design)
are left to #7211, #7378 and #7405. docs/localization-parity.md and
docs/target-app-parity.md give the new counts: 3,554 @msg rows, and 55
messages the report lists for zh-hans, all of them translated by open
pull requests.
The French row of docs/localization-parity.md gave the counts on 92594378a. After main was merged in, fr.tsv holds 9,166 rows, 3,436 of them @msg and 48 @msgplural, and the untranslated report lists 178 missing French messages: 11 for French alone and 167 that main added for every language.
The untranslated report listed 167 status and error messages with no
row in any complete-message catalog, and 11 more that other catalogs
translate but German did not, so with the interface in German these
messages showed in English.
- de.tsv gains 116 `@msg` rows for the listed messages: image export
and encoding errors, color profiles, color books and swatch exchange
files, binary DXF and DWG import, 3D and Revolve limits, and script,
zip and file errors. They sit in one commented block after the
existing message rows.
- de.tsv gains 10 `@msg` rows for the Banner Hems and Grommets errors
and the failed recovery save.
- The 51 listed messages that open #7211 and #7378 translate (composite
fonts and SVG filters), and the justification order error that open
#7116 translates, are left out, so no row is added twice.
- Placeholders, parameter names, command ids and literal values stay as
the English writes them. The translations use the catalog's existing
terms and typography.
- docs/localization-parity.md and docs/target-app-parity.md give the
German counts: 3,563 `@msg` and 48 `@msgplural` rows, 52 messages
still listed.
Adds 1,813 @msg rows to zh-hans.tsv, one for each status and error message the
untranslated report listed for Simplified Chinese, except the 38 that open
pull requests translate in their own rows: the composite font, justification
order and Blob Brush connect end errors. The catalog test rejects a second row
for the same key, so leaving them out keeps the catalog consistent when those
pull requests merge.
The report now lists 40 zh-hans messages: those 38, and two that no catalog
has a row for yet. Its menu, tl!, undo label and swatch name sections are
unchanged. Placeholders, backticked names, quoted values and JavaScript
identifiers stay as in the source.
Docs: docs/localization-parity.md (zh-hans row), docs/target-app-parity.md.
The Dutch catalog lacked a row for 1,813 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- nl.tsv gains 1,813 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- The untranslated report lists 41 Dutch messages after the change:
the composite font errors, the justification spacing error and the
`connect` end error, which open #7211, #7116 and #7330 translate,
and three unknown-parameter and range errors that open #7353
rewrites so that a catalog row can match them. Menu strings, `tl!`
literals and undo labels are unchanged.
- The row for `{k} has control characters{_1}` does not match the
message for a multi-line File Info field, where the last
placeholder is empty.
- docs/localization-parity.md's Dutch row and a line in
docs/target-app-parity.md give the new counts.
The Polish catalog lacked a row for 1,854 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- pl.tsv gains 1,808 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- 44 of the others get their Polish rows from open #7211, #7214,
#7116, #7330 and #1931, so this change leaves them out. 2 are
messages that no catalog has a row for yet. Menu strings, `tl!`
literals, undo labels and swatch names are unchanged.
- Two of the messages have two placeholders in a row. The catalog does
not load such a row, so those two are still shown in English.
- The Polish row of docs/localization-parity.md gives the catalog's
current counts.
Docs: docs/target-app-parity.md, docs/localization-parity.md.
cs is in COMPLETE_MESSAGES, but the untranslated report listed 1,853
status and error messages with no Czech row, so with the interface in
Czech those messages showed in English.
- cs.tsv gains 1,813 `@msg` rows in one block after the last row. The
translations are VectorCraft's own, written from the English meaning
with the catalog's terms and typography (polite second person, Czech
quotation marks „…“). Placeholders, backticked names, command ids,
double-quoted values and bare true, false and null stay as the
English writes them.
- The 38 messages whose Czech rows open #7211, #7116 and #7330 add are
left out, so the catalog keeps one row per key when they merge.
- Menu strings, `tl!` literals, undo labels and swatch names are
unchanged.
- The Czech row of docs/localization-parity.md gives the catalog's
current counts.
The Traditional Chinese catalog had no row for 1,852 of the status and
error messages that i18n::tests::untranslated_report finds in the
sources, so the status bar showed them in English.
- zh-hant.tsv gets 1,813 @msg rows under one comment line at the end of
the file, written in Taiwan usage with the catalog's existing terms.
Each row keeps the English key, its placeholders, doubled braces,
parameter names, command ids and quoted values unchanged.
- The 38 rows that open #7211, #7116 and #7330 add, and the row #7214
added, are left out, so the catalogs stay consistent.
- docs/localization-parity.md and docs/target-app-parity.md give the new
counts: 3,438 @msg and 48 @msgplural rows, 40 messages still listed.
The rows for `{name} must be {lo}–{hi}{unit} (got {v})` and
`unknown parameter `{within}{key}`; {why}` are counted by the report, but
Template::parse does not load a template with two placeholders in a row,
so those two messages still show in English. The row for
`{k} has control characters{_1}` does not match the message for a
multi-line File Info field, where its last placeholder is empty.
The Korean catalog lacked a row for 1,852 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English. ko.tsv now has an @msg
row for 1,813 of them: the errors of commands and their parameter
checks, scripts, file import and export, printing and plug-ins.
The other 39 are messages that open #7211, #7214, #7116 and #7330
also translate in ko.tsv. They are left out so the catalog has no
duplicate key when those pull requests merge.
The rows keep every placeholder, parameter name, command id and
literal value of the English, and use the feature names the catalog
already has.
The report's Korean menu strings, tl! strings, undo labels and swatch
names are unchanged.
Docs: docs/localization-parity.md, docs/target-app-parity.md.
uk is in COMPLETE_MESSAGES, but the untranslated report listed status
and error messages with no Ukrainian row, so with the interface in
Ukrainian those messages showed in English.
- uk.tsv gains 1,811 `@msg` rows. The translations are VectorCraft's
own, written from the English meaning with the catalog's terms and
typography (« » around interface names, ’ inside words).
Placeholders, backticked names, command ids, double-quoted values and
bare true, false and null stay as the English writes them.
- The 41 rows that open #7211, #7214, #7116, #7330 and #817 add to
uk.tsv are left out, so the catalog keeps one row per key when they
merge (bundled_catalogs_are_consistent rejects a second row for a
key).
- The Ukrainian row of docs/localization-parity.md gives the catalog's
counts.
pt-br is in COMPLETE_MESSAGES, but the untranslated report listed 1,851
status and error messages with no pt-br row, so with the interface in
Brazilian Portuguese those messages showed in English.
- pt-br.tsv gains 1,812 `@msg` rows. The translations are VectorCraft's
own, written from the English meaning with the catalog's terms.
Placeholders, backticked names, command ids, parameter names,
double-quoted values and bare true, false and null stay as the English
writes them.
- The 39 messages that open #7211, #7214, #7116 and #7330 add pt-br rows
for are left out. bundled_catalogs_are_consistent rejects a second row
for the same key.
- The Portuguese row of docs/localization-parity.md gives the catalog's
counts: 9,260 rows, 3,445 of them `@msg` and 48 `@msgplural`.
Open #7211, #7214 and #7116 add German rows for 38 of the messages this
branch translates. A second row for the same key fails
bundled_catalogs_are_consistent once both sides merge, so this branch
drops its 38 rows and leaves those messages to the other pull requests.
The German lines in docs/localization-parity.md and
docs/target-app-parity.md give the new counts.
Open #7211, #7214 and #7116 add French rows for 38 of the messages this
branch translates. A second row for the same key fails
bundled_catalogs_are_consistent once both sides merge, so this branch
drops its 38 rows and leaves those messages to the other pull requests.
The French row of docs/localization-parity.md gives the new counts.
it is in COMPLETE_MESSAGES, but the untranslated report listed 1,842
status and error messages with no Italian row, so with the interface in
Italian those messages showed in English.
- it.tsv gains 1,802 `@msg` rows. The translations are VectorCraft's
own, written from the English meaning with the catalog's terms, and
await native review. Placeholders, backticked names, command ids,
double-quoted values and bare true, false and null stay as the
English writes them.
- The untranslated report now lists 40 Italian messages. 38 of those
keys get Italian rows from open pull requests 7211, 7214 and 7116,
so they are left out here. Menu strings, `tl!` literals, undo labels
and swatch names are unchanged.
- The Italian row of docs/localization-parity.md gives the catalog's
current counts, and docs/target-app-parity.md has a line for the
change.
The German catalog lacked a row for 1,842 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- de.tsv gains 1,842 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- The untranslated report now lists no German messages. Menu strings,
`tl!` literals, undo labels and swatch names are unchanged.
- Two of the messages have two placeholders in a row. The catalog does
not load such a row, so those two are still shown in English.
- The German row of docs/localization-parity.md gives the catalog's
current message counts.
Docs: docs/target-app-parity.md, docs/localization-parity.md.
fr is in COMPLETE_MESSAGES, but the untranslated report listed 1,842
status and error messages with no French row, so with the interface in
French those messages showed in English.
- fr.tsv gains 1,842 `@msg` rows in one block after the last row. The
translations are VectorCraft's own, written from the English meaning
with the catalog's terms and typography (no-break space before
: ; ? ! and inside « »). Placeholders, backticked names, command ids,
double-quoted values and bare true, false and null stay as the
English writes them.
- The untranslated report now lists no French messages. Menu strings,
`tl!` literals, undo labels and swatch names are unchanged.
- The French row of docs/localization-parity.md gives the catalog's
current counts.
The Hindi catalog called a variable चर, परिवर्तनीय, वैरिएबल or
वेरिएबल from one row to the next: the Variables panel, Load and Save
Variable Library, Variable Options and the data-merge messages mixed
them, and so did variable widths, the font technology label and
environment variables. Every such row now says वेरिएबल (plural
वेरिएबल्स).
Close or Join, Join Point Text, Join the lines of each paragraph and
most of the path join messages said शामिल हों, which means joining a
group; the other join messages used जुड़ना, जॉइन or the English word.
They now say जोड़ें, as the Join command already did. The Discord rows
keep शामिल हों, and the stroke corner names and the Join tool keep
जॉइन.
hindi_rows_use_one_term_for_a_variable_and_for_joining_paths checks
both terms in every row. docs/localization-hi.md lists the terms, and
the Hindi row counts in it and in docs/localization-parity.md are
current (8,782 rows, 3,014 @msg).
193 Hindi rows outside the plug-in messages said something other than
their English: "a number of points" read as "many digits", swatches as
clocks, crop as a harvest, resolution as a resolve, and saving used
words the glossary replaces. Others left English prose in place,
dropped a clause ("to keep them all", "what follows it") or ran the
sentence backwards.
- Rows use सेव, स्वॉच, क्रॉप, रिज़ॉल्यूशन, पाथ and टाइप (for a text
object) as docs/localization-hi.md sets them.
- Values a command reads (enum values, preset names, OpenType tags)
stay as the English writes them.
- A test checks those terms and the point unit in every Hindi row, and
another pins rows whose quantity or clause was lost.
- docs/localization-hi.md, docs/localization-parity.md and
docs/target-app-parity.md carry the new counts and a wording note.
Dutch was not in COMPLETE_MESSAGES, so with the interface in Dutch
script errors, plug-in manifest and permission errors, parameter
schema errors, 3D effect refusals, file-reader errors and data-set
messages showed in English.
- nl.tsv gains 557 `@msg` rows and one `@msgplural` row: the messages
the German catalog translates and Dutch lacked. Most are one block
with a header comment on their conventions, in the order de.tsv
holds them; the rest sit next to the related existing rows.
Backticked names, command ids, double-quoted values and bare true,
false and null stay as the English writes them.
- nl joins COMPLETE_MESSAGES, so the message tests that iterate the
list check Dutch too, and the untranslated report lists Dutch's
missing messages. It lists the same set for Dutch as for German.
- The registry comment, docs/development.md, the Dutch row and
introduction of docs/localization-parity.md, and the interface
languages line of docs/target-app-parity.md list Dutch among the
languages that translate messages.
Adds Gujarati to the target-app-parity localization evidence list and
the docs/roadmap.md milestone notes, following the Hindi entries, and
marks the catalog as reviewed by a native speaker with zero/one
singular plurals. Scores and estimates unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds a Gujarati interface catalog modelled on the Hindi catalog.
Registers gu in LANGUAGES, adds Gujarati script font fallback, and
updates the localization parity doc and ROADMAP languages table.
Translations are written from the English meaning (clean-room).
Common English technology terms are transliterated. About 30 terms
are flagged for native review; 2,607 messages remain in English.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The Brazilian Portuguese catalog was marked complete under the tests, but 174 strings that the
German, French, Italian and Spanish catalogs already translate still fell back to English: smart
object and smart-filter editors, print presets and Japanese paper names, dimension lines and text,
the gutter, workspace names, swatch names and canvas messages.
Rows follow the catalog's vocabulary (dimension = cota, swatch = amostra, artboard = Mesa de
Trabalho, gutter = medianiz, line weight = espessura da linha) and are appended after the existing
entries; placeholders, ellipses and colons are unchanged. The parity doc records the new count
(6,126) with the commit it was measured on, following the rule in "How it is measured".
bs.tsv: Bosnian (Latin script, Ijekavian) catalog covering every key of
VectorCraft's other catalogs, its wording shared with storytold/craft-i18n
locales/bs/ and the strings craft-i18n lacks translated new. Every bs-*
locale selects it; counts use one/few/other. Locale and plural tests,
localization docs and an attribution entry (AI-assisted, not yet
reviewed by a native speaker).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Tayw8nmxoLLmKv13jK93z