diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 9b945bd23d..83145f57e2 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -6401,9 +6401,6 @@ axis Y Axis Y 軸 @msg `{KEY}` must be a list `{KEY}` にはリストを指定してください @msg `{KEY}` takes at most {MAX_PARAGRAPH_INDENTS} entries (got {_1}) `{KEY}` に指定できるエントリは最大 {MAX_PARAGRAPH_INDENTS} 個です (指定数: {_1}) @msg `{KEY}` takes no `{other}` beside it `{KEY}` と一緒に `{other}` は指定できません -@msg `{_1}` can't name a composite font `{_1}` は合成フォントの名前に使用できません -@msg `{_1}` is the name of an installed font `{_1}` はインストール済みのフォントの名前です -@msg `{_1}`: {_2} is set in `{font}`, a composite font `{_1}`: {_2} は合成フォント `{font}` で設定されています @msg `{base}` is larger than {_1} MB `{base}` は {_1} MB を超えています @msg `{base}` is not in the DCS file's folder `{base}` は DCS ファイルのフォルダーにありません @msg `{key}` holds more than {MAX_EDIT_WORDS} words `{key}` の単語が {MAX_EDIT_WORDS} 個を超えています @@ -6422,20 +6419,13 @@ axis Y Axis Y 軸 @msg `{key}` must name an object attached to the path of an Objects on Path group `{key}` にはパス上のオブジェクトグループのパスに配置されたオブジェクトを指定してください @msg `{key}` names an object that is hidden or locked `{key}` に指定されたオブジェクトは非表示またはロックされています @msg `{name}` is a file of its own, which can only be found next to the DCS file's path `{name}` は独立したファイルで、DCS ファイルのパスと同じ場所でのみ見つけられます -@msg `{name}`: give the kanji part `{name}`: 漢字の部分を指定してください -@msg `{name}`: parts must be an object `{name}`: parts にはオブジェクトを指定してください -@msg `{name}`: unknown class `{k}`; the classes are kanji, kana, punctuation, symbols, roman and numerals `{name}`: `{k}` は不明なクラスです。クラスは kanji、kana、punctuation、symbols、roman、numerals です -@msg `{name}`: unknown key `{k}` in {_1} `{name}`: {_1} の `{k}` は不明なキーです -@msg `{name}`: {_1} must be an object `{name}`: {_1} にはオブジェクトを指定してください @msg `{name}`: {_1}: {e} `{name}`: {_1}: {e} -@msg `{raw}` can't name a composite font (1 to {COMPOSITE_NAME_MAX} characters, no control characters) `{raw}` は合成フォントの名前に使用できません (1~{COMPOSITE_NAME_MAX} 文字、制御文字なし) @msg `{u}` is no Unicode character `{u}` は Unicode 文字ではありません @msg `{word}` isn't in the custom dictionary `{word}` はカスタム辞書にありません @msg a CMap has too many mappings CMap のマッピングが多すぎます @msg a \\u escape needs four hexadecimal digits \\u エスケープには 4 桁の 16 進数が必要です @msg a comma in an XPath expression must separate function arguments XPath 式のカンマは関数の引数を区切るものでなければなりません @msg a document holds at most {_1} SVG filters ドキュメントに含められる SVG フィルターは最大 {_1} 個です -@msg a document keeps at most {COMPOSITE_FONTS_MAX} composite fonts ドキュメントに保持できる合成フォントは最大 {COMPOSITE_FONTS_MAX} 個です @msg a document with unsaved changes has no recovery copy 未保存の変更があるドキュメントに復帰用のコピーがありません @msg a font's data is too large フォントのデータが大きすぎます @msg a font's subroutines are too large フォントのサブルーチンが大きすぎます @@ -6484,15 +6474,11 @@ axis Y Axis Y 軸 @msg character dimensions cannot be represented with the target text transform 文字の寸法をターゲットのテキスト変形で表すことができません @msg continuation must be an array of path chunks continuation にはパスチャンクの配列を指定してください @msg continuation requires points continuation には点が必要です -@msg dataBase64 is not base64 dataBase64 が base64 ではありません -@msg each font must be {name, parts} 各フォントは {name, parts} にしてください -@msg each font needs a name 各フォントに名前が必要です @msg each path chunk must contain 1 to 4096 points 各パスチャンクには 1~4096 個の点が必要です @msg each pick is {{at: [x, y]}} or {{rect: [x0, y0, x1, y1]}} (got {v}) 各指定は {{at: [x, y]}} または {{rect: [x0, y0, x1, y1]}} です (指定値: {v}) @msg each weight must be a number of 0 or more (got {v}) 各ウェイトには 0 以上の数値を指定してください (指定値: {v}) @msg finally table {t} out of range finally テーブル {t} が範囲外です @msg flags cannot be given with a RegExp object RegExp オブジェクトと一緒にフラグを指定することはできません -@msg fonts must be a list of composite fonts fonts には合成フォントのリストを指定してください @msg function declaration index out of range 関数宣言のインデックスが範囲外です @msg give `char`, `text`, `code` or `unicode` `char`、`text`、`code`、`unicode` のいずれかを指定してください @msg give `count` or `spacing`, not both `count` または `spacing` のどちらか一方を指定してください @@ -6501,10 +6487,8 @@ axis Y Axis Y 軸 @msg give `xml`, one SVG element SVG の 要素を 1 つ `xml` に指定してください @msg give exactly one of `at`, `rect` and `points` `at`、`rect`、`points` のうち 1 つだけを指定してください @msg give exactly one of `path`, `data` and `dataBase64` `path`、`data`、`dataBase64` のうち 1 つだけを指定してください -@msg give fonts: [{name, parts}…] fonts: [{name, parts}…] を指定してください @msg give index or indexes, not both index または indexes のどちらか一方を指定してください @msg give one element 要素を 1 つ指定してください -@msg give one of path, data or dataBase64 path、data、dataBase64 のいずれかを指定してください @msg give opacity or blend opacity または blend を指定してください @msg handler at {_1} expects {_2} values but its range starts with {d} {_1} のハンドラーは {_2} 個の値を想定していますが、範囲の開始時は {d} 個です @msg handler depth too large ハンドラーの深さが大きすぎます @@ -6549,8 +6533,6 @@ axis Y Axis Y 軸 @msg must be an object with `kind` and `value` には `kind` と `value` を持つオブジェクトを指定してください @msg must have `kind` alert, confirm or prompt の `kind` には alert、confirm、prompt のいずれかを指定してください @msg must have exactly `kind` and `value` には `kind` と `value` だけを指定してください -@msg names must be a list of names names には名前のリストを指定してください -@msg names must be strings names には文字列を指定してください @msg needs a closing quote after the name 名前の後に閉じ引用符が必要です @msg needs a name 名前が必要です @msg needs a name of at most 64 bytes 64 バイト以内の名前が必要です @@ -6562,9 +6544,6 @@ axis Y Axis Y 軸 @msg no SVG filter at index {k} インデックス {k} に SVG フィルターはありません @msg no arrowheads file here ここに矢印ファイルはありません @msg no character has code {code} コード {code} の文字はありません -@msg no composite font 合成フォントがありません -@msg no composite font named `{n}` `{n}` という名前の合成フォントはありません -@msg no composite fonts to export 書き出す合成フォントがありません @msg no custom arrowhead {name} (see stroke.arrowheads.list) カスタム矢印 {name} はありません (stroke.arrowheads.list を参照) @msg no file to open 開くファイルがありません @msg no instructions 命令がありません @@ -6576,8 +6555,6 @@ axis Y Axis Y 軸 @msg node {_1} already has the text variable `{_2}` ノード {_1} にはすでにテキスト変数 `{_2}` があります @msg not a DCS file DCS ファイルではありません @msg not a RegExp object RegExp オブジェクトではありません -@msg not a composite fonts file: no compositeFonts list 合成フォントファイルではありません: compositeFonts リストがありません -@msg not a composite fonts file: {e} 合成フォントファイルではありません: {e} @msg not a regular expression 正規表現ではありません @msg not an action set: the text doesn't start with /version and a number アクションセットではありません: テキストが /version と数値で始まっていません @msg nothing to repeat 繰り返す対象がありません @@ -6592,7 +6569,6 @@ axis Y Axis Y 軸 @msg operand too large オペランドが大きすぎます @msg order is a whole number from 0 to {others}, not `{v}` order には 0 から {others} までの整数を指定してください (`{v}` は指定できません) @msg path chunks must share their boundary point パスの分割部分は境界点を共有している必要があります -@msg path is empty パスが空です @msg pdfCompatible: false needs the artboards to keep the editable artwork when useArtboards is false pdfCompatible: false の場合、useArtboards が false のときは、編集可能なアートワークを保持するためにアートボードが必要です @msg point x must be a number 点の x には数値を指定してください @msg point y must be a number 点の y には数値を指定してください @@ -6644,10 +6620,6 @@ axis Y Axis Y 軸 @msg the document has no SVG filter named {r} ドキュメントに {r} という名前の SVG フィルターはありません @msg the document has no color swatches ドキュメントにカラースウォッチがありません @msg the document's swatches hold {_1} colors; the document reduction takes at most 255 ドキュメントのスウォッチには {_1} 色ありますが、ドキュメント減色で使用できるのは最大 255 色です -@msg the file holds more than {COMPOSITE_FONTS_MAX} composite fonts ファイルに {COMPOSITE_FONTS_MAX} 個を超える合成フォントがあります -@msg the file holds no composite fonts ファイルに合成フォントがありません -@msg the file holds two composite fonts named `{_1}` ファイルに `{_1}` という名前の合成フォントが 2 つあります -@msg the file is larger than 4 MB ファイルが 4 MB を超えています @msg the file isn't valid SVG: {e} ファイルが有効な SVG ではありません: {e} @msg the file names no plate ファイルに版が指定されていません @msg the function's prototype is not an object 関数のプロトタイプがオブジェクトではありません @@ -6696,10 +6668,8 @@ axis Y Axis Y 軸 @msg toString is not a function toString は関数ではありません @msg too many arguments 引数が多すぎます @msg too many quantifiers 量指定子が多すぎます -@msg two composite fonts are named `{_1}` `{_1}` という名前の合成フォントが 2 つあります @msg unknown OpenType feature `{t}` (liga, calt, dlig, smcp, frac, onum, tnum, ordn, swsh, ss01–ss20, salt, titl, pnum, lnum, sups, subs, numr, dnom, aalt; prefix - to turn off; swsh, ss01–ss20, salt, titl, pnum, lnum, sups, subs, numr, dnom and aalt take an alternate's number as `tag=N` with N from 0 to {_1}, as `salt=2`) `{t}` は不明な OpenType 機能です (liga, calt, dlig, smcp, frac, onum, tnum, ordn, swsh, ss01–ss20, salt, titl, pnum, lnum, sups, subs, numr, dnom, aalt。オフにするには先頭に - を付けます。swsh, ss01–ss20, salt, titl, pnum, lnum, sups, subs, numr, dnom, aalt には、`salt=2` のように `tag=N` の形式で代替字形の番号を指定できます。N は 0 から {_1} まで) @msg unknown dither `{d}` (diffusion, pattern, noise or none) `{d}` は不明なディザの指定です (diffusion、pattern、noise、none のいずれか) -@msg unknown key `{k}`; a font takes name and parts `{k}` は不明なキーです。フォントに指定できるのは name と parts です @msg unknown panel `{panel}` `{panel}` は不明なパネルです @msg unknown parameter `{key}` `{key}` は不明なパラメーターです @msg unknown parameter `{within}settings.{format}`; {why} `{within}settings.{format}` は不明なパラメーターです。{why} @@ -6720,13 +6690,7 @@ axis Y Axis Y 軸 @msg {k}: a custom arrowhead's path needs an area to fill and at most {most} anchors and {most} subpaths, each anchor within {far} head units of its tip {k}: カスタム矢印のパスには塗りつぶせる領域が必要で、アンカーは最大 {most} 個、サブパスは最大 {most} 個、各アンカーは先端から矢印単位で {far} 以内に収めてください @msg {k}: bad custom arrowhead path: {e} {k}: カスタム矢印のパスが正しくありません: {e} @msg {k}: bad custom arrowhead: {e} {k}: カスタム矢印が正しくありません: {e} -@msg {k}: baseline must be {_1} to {_2}% {k}: baseline には {_1}~{_2}% を指定してください @msg {k}: custom must be a name {k}: custom には名前を指定してください -@msg {k}: give a font {k}: フォントを指定してください -@msg {k}: only kana can be scaled at the center {k}: 中央を基準に拡大・縮小できるのはかなだけです -@msg {k}: only kana, roman and numerals can be scaled {k}: 拡大・縮小できるのはかな、欧文、数字だけです -@msg {k}: scale must be {_1} to {_2}% {k}: scale には {_1}~{_2}% を指定してください -@msg {k}: size must be {_1} to {_2}% {k}: size には {_1}~{_2}% を指定してください @msg {name} must be a number {name} には数値を指定してください @msg {path}: copy takes a DCS file only when its plates are inside it; relink to it where its plate files are {path}: copy で DCS ファイルを使用できるのは、版がファイル内にある場合だけです。版ファイルのある場所でそのファイルに再リンクしてください @msg {path}: larger than {_1} MB {path}: {_1} MB を超えています @@ -6996,7 +6960,6 @@ axis Y Axis Y 軸 @msg `{name}` is a working space: choose another with edit.colorSettings first `{name}` は作業用スペースです: 先に edit.colorSettings で別のものを選択してください @msg `{name}` is built in and stays `{name}` は組み込みのため、削除されません @msg `{name}` takes a paint of its own kind (colour, gradient or pattern) `{name}` には同じ種類のペイント (カラー、グラデーション、パターン) を指定してください -@msg `{name}`: Minimum must not exceed Desired, nor Desired Maximum `{name}`: 最小は最適を、最適は最大を超えないようにしてください @msg `{n}` can't be deleted `{n}` は削除できません @msg `{n}` can't be merged `{n}` は結合できません @msg `{n}` can't be moved `{n}` は移動できません @@ -7747,7 +7710,6 @@ axis Y Axis Y 軸 @msg select a graph グラフを選択してください @msg select a group or layer with visible, unlocked members 表示されていてロックされていないメンバーを含むグループまたはレイヤーを選択してください @msg select a layer レイヤーを選択してください -@msg select a path パスを選択してください @msg select a text object テキストオブジェクトを選択してください @msg select an image (or an Image Trace group) 画像 (または画像トレースグループ) を選択してください @msg select an image, or pass id 画像を選択するか、id を指定してください diff --git a/docs/localization-parity.md b/docs/localization-parity.md index 12b68a0d8b..1df39336d0 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -34,7 +34,7 @@ Chinese by `imachus`). Only Georgian is recorded as reviewed by a native speaker | French | `fr` | 4,020 / 4,020 (100%) | all | Latin | no | full | — (review) | | Portuguese | `pt-br` | 6,106 catalog entries (counted 2026-10-31 on `main` at `d26dd933a`): menus, `tl!` literals and messages complete when counted; one/other plurals | all | Latin | contributor is a Brazilian Portuguese speaker; further native review welcome | full | — (review) | | Indonesian | `id` | 5,279 rows, 750 of them `@msg` (counted 2026-10-21): menus and `tl!` literals complete when counted; its messages are partial; one plural form | dialogs and tooltips all; 750 message rows (French has 796) | Latin | no | full | — (review) | -| Japanese | `ja` | 4,004 / 4,020 (99.6%) | all (3,459 `@msg` and 48 `@msgplural` rows, counted 2026-11-13: the untranslated report lists no missing messages for it) | CJK UI font as above; Japanese IME; vertical type partial; Japanese crop marks and composition settings | no | full | — (review) | +| Japanese | `ja` | 4,004 / 4,020 (99.6%) | all (3,421 `@msg` and 48 `@msgplural` rows, counted 2026-11-13: the untranslated report lists 38 missing messages for it) | CJK UI font as above; Japanese IME; vertical type partial; Japanese crop marks and composition settings | no | full | — (review) | | German | `de` | 3,952 / 4,020 (98%; menus, literals and messages complete when counted) | all (602 of 604 message rows; landed 2026-10-10) | Latin | contributor-written, not reviewed | full | — (review) | | Korean | `ko` | 4,870 rows (counted 2026-10-21): menus, `tl!` literals and messages complete when counted; one plural form | all | Hangul from an installed system font on the desktop (Apple SD Gothic Neo, Malgun Gothic, Noto Sans CJK KR…); the web build has no Korean UI font yet (craft-fonts); IME path exists | no (AI-drafted) | full | — (review; web font) | | Vietnamese | `vi` | 4,886 rows (counted 2026-10-21): menus, `tl!` literals and messages complete when counted; one plural form; 4,046 plain + 18 `@plural` + 28 contextual + 794 `@msg` | all | Latin with Vietnamese diacritics (stacked marks attach in precomposed, decomposed and keyboard forms, #4491; glyph tests pass) | contributor is a Vietnamese speaker; AI-assisted draft, further native review welcome | full | — (review) | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 1d02d3c039..72ee4a28f4 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -875,7 +875,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur - The History panel, Edit › Undo and Edit › Redo translate the names of the steps that apply or redefine a character or paragraph style and of the step that redefines a graphic style: each such step keeps its template (`Apply {name}`, `Redefine {name}`, `Redefine Graphic Style “{name}”`) and the style's name, every complete catalog has a row for each template, and the panel and the menu show the style's name as the document holds it, except the Normal styles' names, which they show in the interface language (`steps_named_after_a_style_list_the_template_around_the_name`, `undo_and_redo_name_a_style_step_around_the_style_name`). - The status bar translates the limits a plug-in run can exceed (its instruction, time and memory budgets and its output size) and the error of a plug-in removal that leaves the plug-in's grant in the plug-in store, in every language that translates every message. The untranslated-strings report also lists messages that an error or a status takes from a `&str` constant (`plugin_limit_errors_are_translated`, `message_scan_reads_messages_held_in_constants`). - The status bar translates the plug-in host's other errors (manifest, module and run checks, the output an importer, exporter or effect returns, and the approval a plug-in's permissions need) in every language that translates every message. A JSON object or array inside a message stays as written, and a message that wraps another one, such as `plug-in manifest: {0}`, is matched by its own row before a row that starts with a placeholder. The reasons inside these errors (what is wrong with a parameter's spec or dialog keys, the value a parameter needs, what is wrong with an object, stroke, paint or effect in a plug-in's output) are translated with them, and the untranslated-strings report lists the reasons the plug-in host's error helpers take (`plugin_messages_are_translated_in_every_complete_catalog`, `plugin_errors_translate_with_their_values`, `plugin_error_reasons_are_translated_with_the_error`, `message_scan_reads_plugin_helpers`, `templates_that_start_with_text_match_first`). - - The Japanese catalog (`crates/ui-egui/src/i18n/ja.tsv`) has an `@msg` row for every status and error message the untranslated report (`untranslated_report`) finds in the sources, 3,459 `@msg` rows in all. The report's Japanese section lists no messages. The status bar does not use the rows for ``unknown parameter `{within}{key}`; {why}`` and `{name} must be {lo}–{hi}{unit} (got {v})`, because a message with two placeholders in a row cannot be matched (`Template::parse` in `crates/ui-egui/src/i18n/catalog.rs`). The row for `{k} has control characters{_1}` does not match the File Info error for a multi-line field, where the last placeholder is empty. A native speaker has not reviewed the wording. + - The Japanese catalog (`crates/ui-egui/src/i18n/ja.tsv`) has an `@msg` row for the status and error messages the untranslated report (`untranslated_report`) finds in the sources, 3,421 `@msg` rows in all. The report lists 38 Japanese messages: the composite font, select-a-path and justification order errors that open #7211, #7214 and #7116 translate. The status bar does not use the rows for ``unknown parameter `{within}{key}`; {why}`` and `{name} must be {lo}–{hi}{unit} (got {v})`, because a message with two placeholders in a row cannot be matched (`Template::parse` in `crates/ui-egui/src/i18n/catalog.rs`). The row for `{k} has control characters{_1}` does not match the File Info error for a multi-line field, where the last placeholder is empty. A native speaker has not reviewed the wording. - The status bar translates the errors a script's `File` and `Folder` objects, `vc.run`, `$.evalFile`, the `$` object's properties and functions, `alert`, `confirm` and `prompt`, `vc.document` and `vc.log` raise, the limits a run can pass, and the errors of Drop Script Engine, and the line for a run that fails (a syntax error, a thrown error, a limit, a stop or an internal error, with the script's name, the line and column, the included file it is in and the files left written), in every language that translates every message. The script's name, paths, numbers, command ids and the text a script throws itself are shown as they are. A failure with no line and column, such as an error in code `eval` compiled, is shown with one colon after the script's name (`an_error_without_a_place_names_the_script_and_kind`). A message template that names a value twice matches only when both places hold the same text, so the line for a failed run is not taken for the message inside it (`a_repeated_placeholder_matches_the_same_text`). The untranslated-strings report also lists the messages the script host's `fail`, `value` and `over` helpers take and the errors the script interpreter throws, and a constant's text comes from the file or crate that declares it, so the Scripts menu's headers are not listed as messages (`script_errors_are_translated`, `script_host_errors_are_translated`, `message_scan_reads_script_interpreter_errors`, `message_scan_reads_constants_of_the_file_and_its_crate`, `message_scan_skips_test_modules_with_any_test_cfg`). - Localised UI: menus (in-window and native), panels, dialogs, toolbar and Preferences read from per-language catalogs (`crates/ui-egui/src/i18n`, see `docs/development.md`); Traditional Chinese (Taiwan), Simplified Chinese (mainland), Japanese, Korean, Vietnamese, German, Spanish, French, Italian, Polish, Brazilian Portuguese, Russian, Ukrainian, Georgian and Catalan ship complete, and Czech covers every menu label (and more), with system-locale detection on macOS, Windows, Linux and the web (the browser's languages, or `?lang=`), a Language preference and, on macOS, a VectorCraft ▸ Language menu. Names are never translated (fonts and their styles, layers, artboards, saved presets, user libraries, custom workspaces, recent files, plug-ins). The counts that Package's status and question, the folder search of Missing Fonts and Find Linked Files, the modified and missing linked file prompts and the CSS Properties panel's notes show use the interface language's plural forms instead of a fixed "(s)" form. Evidence: `the_missing_links_note_uses_each_count_form` in `crates/ui-egui/src/dialogs/tests_package.rs`, `the_modified_links_question_uses_each_count_form` in `crates/ui-egui/src/dialogs/missing_links.rs`, `search_counts_use_each_count_form` in `crates/ui-egui/src/dialogs/missing_fonts/tests.rs` and `the_unnamed_objects_note_uses_each_count_form` in `crates/ui-egui/src/panels/tests_css_properties.rs`.