Merge pull request #7038 from dotCooCoo/fix/schema-expected-phrases

i18n: parameter schema errors translate what the value must be
This commit is contained in:
BFlat
2026-11-13 14:16:56 +07:00
committed by GitHub
34 changed files with 823 additions and 4 deletions
Generated
+1
View File
@@ -6855,6 +6855,7 @@ dependencies = [
"serde",
"serde_json",
"toml",
"vectorcraft-apischema",
"vectorcraft-brush",
"vectorcraft-cad",
"vectorcraft-color",
+1
View File
@@ -68,6 +68,7 @@ rustix = { workspace = true, features = ["std", "process"] }
[dev-dependencies]
egui_kittest = { workspace = true, features = ["wgpu", "snapshot"] }
vectorcraft-apischema = { workspace = true }
vectorcraft-testkit = { workspace = true }
# A variable font built in code (no font file is committed).
vectorcraft-text = { workspace = true, features = ["test-fonts"] }
+12 -4
View File
@@ -660,7 +660,8 @@ const MESSAGE_DEPTH: usize = 5;
/// Translate a status or error message for display (see the module docs). Unknown messages, and
/// parts of them (file names, numbers, a reason with no entry, a JSON object or array such as
/// `{"objects": [...]}`, a value the message quotes in `"…"`, `“…”` or backticks, such as a
/// symbol's name), stay as they are.
/// symbol's name), stay as they are. A part that starts with `{` or `[` is translated only
/// when it is a whole message with an exact entry, such as `[x, y] (two numbers)`.
pub fn message(lang: Lang, s: &str) -> String {
message_at(lang, s, MESSAGE_DEPTH)
}
@@ -671,9 +672,16 @@ fn message_at(lang: Lang, s: &str, depth: usize) -> String {
let form = count.map_or(forms.len().saturating_sub(1), |n| (lang.0.plural)(n).min(forms.len().saturating_sub(1)));
let Some(template) = forms.get(form) else { return s.to_string() };
let quoted = |v: &str| [('"', '"'), ('“', '”'), ('`', '`')].iter().any(|(a, b)| s.contains(&format!("{a}{v}{b}")));
let nested = |v: &str| depth > 1 && !v.starts_with(['{', '[']) && !quoted(v);
let values: Vec<(&str, String)> =
caps.into_iter().map(|(k, v)| (k, if nested(v) { message_at(lang, v, depth - 1) } else { v.to_string() })).collect();
let nested = |v: &str| {
if depth <= 1 || quoted(v) {
v.to_string()
} else if v.starts_with(['{', '[']) {
lang.catalog().exact_message(v).unwrap_or(v).to_string()
} else {
message_at(lang, v, depth - 1)
}
};
let values: Vec<(&str, String)> = caps.into_iter().map(|(k, v)| (k, nested(v))).collect();
let args: Vec<(&str, &str)> = values.iter().map(|(k, v)| (*k, v.as_str())).collect();
fill_once(template, &args)
}
+1
View File
@@ -4192,6 +4192,7 @@ axis Both И двете
@msg `{key}` must be a whole number between {min} and {max} (got {x}) `{key}` трябва да бъде цяло число между {min} и {max} (получено е {x})
@msg `{key}` must be between {min} and {max} (got {x}) `{key}` трябва да бъде между {min} и {max} (получено е {x})
@msg `{key}` must be one of {_1} `{key}` трябва да бъде едно от {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` трябва да бъде едно от {_1}, а не {got}
@msg `{key}` must be true or false `{key}` трябва да бъде true или false
@msg `{k}` must be [x, y] `{k}` трябва да бъде [x, y]
@msg `{name}` has no options `{name}` няма опции
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4562,6 +4562,7 @@ imageTrace Outline Obris
@msg `{key}` must be a whole number between {min} and {max} (got {x}) `{key}` mora biti cijeli broj između {min} i {max} (dobiveno {x})
@msg `{key}` must be between {min} and {max} (got {x}) `{key}` mora biti između {min} i {max} (dobiveno {x})
@msg `{key}` must be one of {_1} `{key}` mora biti jedno od {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` mora biti jedno od {_1}, a ne {got}
@msg `{key}` must be true or false `{key}` mora biti true ili false
@msg `top` and `below` can't both be true `top` i `below` ne mogu oba biti true
@msg `select` must be true or false `select` mora biti true ili false
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6478,6 +6478,35 @@ digits Malayalam Malaiàlam
@msg the path has no anchor points el traçat no té punts d’ancoratge
@msg too many anchor points (limit {MAX_ANCHORS}) massa punts d’ancoratge (límit {MAX_ANCHORS})
@msg true or false true o false
@msg a number >= {_1} un nombre >= {_1}
@msg a number > {_1} un nombre > {_1}
@msg a number <= {_1} un nombre <= {_1}
@msg a number < {_1} un nombre < {_1}
@msg a number {_1} to {_2} un nombre de {_1} a {_2}
@msg a number >= {_1} and < {_2} un nombre >= {_1} i < {_2}
@msg a number > {_1} and <= {_2} un nombre > {_1} i <= {_2}
@msg a number > {_1} and < {_2} un nombre > {_1} i < {_2}
@msg a number ({_1}) un nombre ({_1})
@msg a number >= {_1} ({_2}) un nombre >= {_1} ({_2})
@msg a number > {_1} ({_2}) un nombre > {_1} ({_2})
@msg a number <= {_1} ({_2}) un nombre <= {_1} ({_2})
@msg a number < {_1} ({_2}) un nombre < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) un nombre de {_1} a {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) un nombre >= {_1} i < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) un nombre > {_1} i <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) un nombre > {_1} i < {_2} ({_3})
@msg an integer un enter
@msg an integer >= {_1} un enter >= {_1}
@msg an integer <= {_1} un enter <= {_1}
@msg an integer {_1} to {_2} un enter de {_1} a {_2}
@msg one of {_1} un de {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` ha de ser un de {_1}, no {got}
@msg an object id (a non-negative integer) un identificador d’objecte (un enter no negatiu)
@msg a list of object ids una llista d’identificadors d’objecte
@msg a color (a string, [r, g, b] or an object) un color (una cadena, [r, g, b] o un objecte)
@msg [x, y] (two numbers) [x, y] (dos nombres)
@msg an object un objecte
@msg a list una llista
@msg unknown key `{k}`; the keys here are {_1} clau desconeguda `{k}`; les claus aquí són {_1}
@msg {_1} is listed twice {_1} apareix dues vegades
@msg {_1} is not the id of an input object {_1} no és l’id d’un objecte d’entrada
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -249,6 +249,12 @@ impl Catalog {
self.templates.iter().find_map(|t| t.captures(s).map(|caps| (t.forms.as_slice(), caps)))
}
/// The translation of a status or error message that has an exact `@msg` entry; templates are
/// not tried.
pub fn exact_message(&self, s: &str) -> Option<&str> {
self.messages.get(s).map(String::as_str)
}
/// The plural form `index` of the message whose English forms are `one|other`.
pub fn plural(&self, one: &str, other: &str, index: usize) -> Option<&str> {
let forms = self.plurals.get(&format!("{one}|{other}"))?;
+29
View File
@@ -6393,6 +6393,35 @@ axis Y Axis osa Y
@msg the path has no anchor points cesta nemá žádné kotevní body
@msg too many anchor points (limit {MAX_ANCHORS}) příliš mnoho kotevních bodů (limit {MAX_ANCHORS})
@msg true or false true nebo false
@msg a number >= {_1} číslo >= {_1}
@msg a number > {_1} číslo > {_1}
@msg a number <= {_1} číslo <= {_1}
@msg a number < {_1} číslo < {_1}
@msg a number {_1} to {_2} číslo od {_1} do {_2}
@msg a number >= {_1} and < {_2} číslo >= {_1} a < {_2}
@msg a number > {_1} and <= {_2} číslo > {_1} a <= {_2}
@msg a number > {_1} and < {_2} číslo > {_1} a < {_2}
@msg a number ({_1}) číslo ({_1})
@msg a number >= {_1} ({_2}) číslo >= {_1} ({_2})
@msg a number > {_1} ({_2}) číslo > {_1} ({_2})
@msg a number <= {_1} ({_2}) číslo <= {_1} ({_2})
@msg a number < {_1} ({_2}) číslo < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) číslo od {_1} do {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) číslo >= {_1} a < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) číslo > {_1} a <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) číslo > {_1} a < {_2} ({_3})
@msg an integer celé číslo
@msg an integer >= {_1} celé číslo >= {_1}
@msg an integer <= {_1} celé číslo <= {_1}
@msg an integer {_1} to {_2} celé číslo od {_1} do {_2}
@msg one of {_1} jedna z hodnot {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` musí být jedna z hodnot {_1}, nikoli {got}
@msg an object id (a non-negative integer) ID objektu (nezáporné celé číslo)
@msg a list of object ids seznam ID objektů
@msg a color (a string, [r, g, b] or an object) barva (řetězec, [r, g, b] nebo objekt)
@msg [x, y] (two numbers) [x, y] (dvě čísla)
@msg an object objekt
@msg a list seznam
@msg unknown key `{k}`; the keys here are {_1} neznámý klíč `{k}`; zde platné klíče jsou {_1}
@msg {_1} is listed twice {_1} je uveden dvakrát
@msg {_1} is not the id of an input object {_1} není ID vstupního objektu
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4308,6 +4308,7 @@ imageTrace Outline Kontur
@msg `{key}` must be a whole number between {min} and {max} (got {x}) `{key}` skal være et heltal mellem {min} og {max} (fik {x})
@msg `{key}` must be between {min} and {max} (got {x}) `{key}` skal være mellem {min} og {max} (fik {x})
@msg `{key}` must be one of {_1} `{key}` skal være en af {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` skal være en af {_1}, ikke {got}
@msg `{key}` must be true or false `{key}` skal være true eller false
@msg `{k}` must be [x, y] `{k}` skal være [x, y]
@msg `{name}` has no options `{name}` har ingen indstillinger
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -5984,6 +5984,35 @@ axis Y Axis Y-Achse
@msg the path has no anchor points der Pfad hat keine Ankerpunkte
@msg too many anchor points (limit {MAX_ANCHORS}) zu viele Ankerpunkte (Grenze {MAX_ANCHORS})
@msg true or false true oder false
@msg a number >= {_1} eine Zahl >= {_1}
@msg a number > {_1} eine Zahl > {_1}
@msg a number <= {_1} eine Zahl <= {_1}
@msg a number < {_1} eine Zahl < {_1}
@msg a number {_1} to {_2} eine Zahl von {_1} bis {_2}
@msg a number >= {_1} and < {_2} eine Zahl >= {_1} und < {_2}
@msg a number > {_1} and <= {_2} eine Zahl > {_1} und <= {_2}
@msg a number > {_1} and < {_2} eine Zahl > {_1} und < {_2}
@msg a number ({_1}) eine Zahl ({_1})
@msg a number >= {_1} ({_2}) eine Zahl >= {_1} ({_2})
@msg a number > {_1} ({_2}) eine Zahl > {_1} ({_2})
@msg a number <= {_1} ({_2}) eine Zahl <= {_1} ({_2})
@msg a number < {_1} ({_2}) eine Zahl < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) eine Zahl von {_1} bis {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) eine Zahl >= {_1} und < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) eine Zahl > {_1} und <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) eine Zahl > {_1} und < {_2} ({_3})
@msg an integer eine ganze Zahl
@msg an integer >= {_1} eine ganze Zahl >= {_1}
@msg an integer <= {_1} eine ganze Zahl <= {_1}
@msg an integer {_1} to {_2} eine ganze Zahl von {_1} bis {_2}
@msg one of {_1} einer der Werte {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` muss einer der Werte {_1} sein, nicht {got}
@msg an object id (a non-negative integer) eine Objekt-ID (eine nicht negative ganze Zahl)
@msg a list of object ids eine Liste von Objekt-IDs
@msg a color (a string, [r, g, b] or an object) eine Farbe (eine Zeichenkette, [r, g, b] oder ein Objekt)
@msg [x, y] (two numbers) [x, y] (zwei Zahlen)
@msg an object ein Objekt
@msg a list eine Liste
@msg unknown key `{k}`; the keys here are {_1} unbekannter Schlüssel `{k}`; die Schlüssel hier sind {_1}
@msg {_1} is listed twice {_1} ist doppelt aufgeführt
@msg {_1} is not the id of an input object {_1} ist nicht die ID eines Eingabeobjekts
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6344,6 +6344,35 @@ axis Y Axis Άξονας Y
@msg the path has no anchor points η διαδρομή δεν έχει σημεία αγκύρωσης
@msg too many anchor points (limit {MAX_ANCHORS}) πάρα πολλά σημεία αγκύρωσης (όριο {MAX_ANCHORS})
@msg true or false true ή false
@msg a number >= {_1} αριθμός >= {_1}
@msg a number > {_1} αριθμός > {_1}
@msg a number <= {_1} αριθμός <= {_1}
@msg a number < {_1} αριθμός < {_1}
@msg a number {_1} to {_2} αριθμός από {_1} έως {_2}
@msg a number >= {_1} and < {_2} αριθμός >= {_1} και < {_2}
@msg a number > {_1} and <= {_2} αριθμός > {_1} και <= {_2}
@msg a number > {_1} and < {_2} αριθμός > {_1} και < {_2}
@msg a number ({_1}) αριθμός ({_1})
@msg a number >= {_1} ({_2}) αριθμός >= {_1} ({_2})
@msg a number > {_1} ({_2}) αριθμός > {_1} ({_2})
@msg a number <= {_1} ({_2}) αριθμός <= {_1} ({_2})
@msg a number < {_1} ({_2}) αριθμός < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) αριθμός από {_1} έως {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) αριθμός >= {_1} και < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) αριθμός > {_1} και <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) αριθμός > {_1} και < {_2} ({_3})
@msg an integer ακέραιος
@msg an integer >= {_1} ακέραιος >= {_1}
@msg an integer <= {_1} ακέραιος <= {_1}
@msg an integer {_1} to {_2} ακέραιος από {_1} έως {_2}
@msg one of {_1} μία από τις τιμές {_1}
@msg `{path}` must be one of {_1}, not {got} Το `{path}` πρέπει να είναι μία από τις τιμές {_1}, όχι {got}
@msg an object id (a non-negative integer) αναγνωριστικό αντικειμένου (μη αρνητικός ακέραιος)
@msg a list of object ids λίστα αναγνωριστικών αντικειμένων
@msg a color (a string, [r, g, b] or an object) χρώμα (συμβολοσειρά, [r, g, b] ή αντικείμενο)
@msg [x, y] (two numbers) [x, y] (δύο αριθμοί)
@msg an object αντικείμενο
@msg a list λίστα
@msg unknown key `{k}`; the keys here are {_1} άγνωστο κλειδί `{k}`· τα κλειδιά εδώ είναι {_1}
@msg {_1} is listed twice το {_1} αναφέρεται δύο φορές
@msg {_1} is not the id of an input object το {_1} δεν είναι αναγνωριστικό αντικειμένου εισόδου
Can't render this file because it is too large.
+29
View File
@@ -6335,6 +6335,35 @@ axis Y Axis Eje Y
@msg the path has no anchor points el trazado no tiene puntos de ancla
@msg too many anchor points (limit {MAX_ANCHORS}) demasiados puntos de ancla (límite {MAX_ANCHORS})
@msg true or false true o false
@msg a number >= {_1} un número >= {_1}
@msg a number > {_1} un número > {_1}
@msg a number <= {_1} un número <= {_1}
@msg a number < {_1} un número < {_1}
@msg a number {_1} to {_2} un número de {_1} a {_2}
@msg a number >= {_1} and < {_2} un número >= {_1} y < {_2}
@msg a number > {_1} and <= {_2} un número > {_1} y <= {_2}
@msg a number > {_1} and < {_2} un número > {_1} y < {_2}
@msg a number ({_1}) un número ({_1})
@msg a number >= {_1} ({_2}) un número >= {_1} ({_2})
@msg a number > {_1} ({_2}) un número > {_1} ({_2})
@msg a number <= {_1} ({_2}) un número <= {_1} ({_2})
@msg a number < {_1} ({_2}) un número < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) un número de {_1} a {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) un número >= {_1} y < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) un número > {_1} y <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) un número > {_1} y < {_2} ({_3})
@msg an integer un entero
@msg an integer >= {_1} un entero >= {_1}
@msg an integer <= {_1} un entero <= {_1}
@msg an integer {_1} to {_2} un entero de {_1} a {_2}
@msg one of {_1} uno de {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` debe ser uno de {_1}, no {got}
@msg an object id (a non-negative integer) un id. de objeto (un entero no negativo)
@msg a list of object ids una lista de id. de objeto
@msg a color (a string, [r, g, b] or an object) un color (una cadena, [r, g, b] o un objeto)
@msg [x, y] (two numbers) [x, y] (dos números)
@msg an object un objeto
@msg a list una lista
@msg unknown key `{k}`; the keys here are {_1} clave desconocida `{k}`; las claves aquí son {_1}
@msg {_1} is listed twice {_1} aparece dos veces
@msg {_1} is not the id of an input object {_1} no es el id de un objeto de entrada
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6423,6 +6423,35 @@ axis Y Axis Y-akseli
@msg the path has no anchor points polulla ei ole ankkuripisteitä
@msg too many anchor points (limit {MAX_ANCHORS}) liian monta ankkuripistettä (raja {MAX_ANCHORS})
@msg true or false true tai false
@msg a number >= {_1} luku >= {_1}
@msg a number > {_1} luku > {_1}
@msg a number <= {_1} luku <= {_1}
@msg a number < {_1} luku < {_1}
@msg a number {_1} to {_2} luku, joka on vähintään {_1} ja enintään {_2}
@msg a number >= {_1} and < {_2} luku >= {_1} ja < {_2}
@msg a number > {_1} and <= {_2} luku > {_1} ja <= {_2}
@msg a number > {_1} and < {_2} luku > {_1} ja < {_2}
@msg a number ({_1}) luku ({_1})
@msg a number >= {_1} ({_2}) luku >= {_1} ({_2})
@msg a number > {_1} ({_2}) luku > {_1} ({_2})
@msg a number <= {_1} ({_2}) luku <= {_1} ({_2})
@msg a number < {_1} ({_2}) luku < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) luku, joka on vähintään {_1} ja enintään {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) luku >= {_1} ja < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) luku > {_1} ja <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) luku > {_1} ja < {_2} ({_3})
@msg an integer kokonaisluku
@msg an integer >= {_1} kokonaisluku >= {_1}
@msg an integer <= {_1} kokonaisluku <= {_1}
@msg an integer {_1} to {_2} kokonaisluku, joka on vähintään {_1} ja enintään {_2}
@msg one of {_1} jokin arvoista {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` on oltava jokin arvoista {_1}, ei {got}
@msg an object id (a non-negative integer) objektitunnus (ei-negatiivinen kokonaisluku)
@msg a list of object ids objektitunnusten luettelo
@msg a color (a string, [r, g, b] or an object) väri (merkkijono, [r, g, b] tai objekti)
@msg [x, y] (two numbers) [x, y] (kaksi lukua)
@msg an object objekti
@msg a list luettelo
@msg unknown key `{k}`; the keys here are {_1} tuntematon avain `{k}`; tässä käytettävät avaimet ovat {_1}
@msg {_1} is listed twice {_1} on luettelossa kahdesti
@msg {_1} is not the id of an input object {_1} ei ole syöteobjektin tunnus
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6388,6 +6388,35 @@ axis Y Axis Axe Y
@msg the path has no anchor points le tracé n’a aucun point d’ancrage
@msg too many anchor points (limit {MAX_ANCHORS}) trop de points d’ancrage (limite {MAX_ANCHORS})
@msg true or false true ou false
@msg a number >= {_1} un nombre >= {_1}
@msg a number > {_1} un nombre > {_1}
@msg a number <= {_1} un nombre <= {_1}
@msg a number < {_1} un nombre < {_1}
@msg a number {_1} to {_2} un nombre de {_1} à {_2}
@msg a number >= {_1} and < {_2} un nombre >= {_1} et < {_2}
@msg a number > {_1} and <= {_2} un nombre > {_1} et <= {_2}
@msg a number > {_1} and < {_2} un nombre > {_1} et < {_2}
@msg a number ({_1}) un nombre ({_1})
@msg a number >= {_1} ({_2}) un nombre >= {_1} ({_2})
@msg a number > {_1} ({_2}) un nombre > {_1} ({_2})
@msg a number <= {_1} ({_2}) un nombre <= {_1} ({_2})
@msg a number < {_1} ({_2}) un nombre < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) un nombre de {_1} à {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) un nombre >= {_1} et < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) un nombre > {_1} et <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) un nombre > {_1} et < {_2} ({_3})
@msg an integer un entier
@msg an integer >= {_1} un entier >= {_1}
@msg an integer <= {_1} un entier <= {_1}
@msg an integer {_1} to {_2} un entier de {_1} à {_2}
@msg one of {_1} l’une des valeurs {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` doit être l’une des valeurs {_1}, pas {got}
@msg an object id (a non-negative integer) un identifiant d’objet (un entier positif ou nul)
@msg a list of object ids une liste d’identifiants d’objet
@msg a color (a string, [r, g, b] or an object) une couleur (une chaîne, [r, g, b] ou un objet)
@msg [x, y] (two numbers) [x, y] (deux nombres)
@msg an object un objet
@msg a list une liste
@msg unknown key `{k}`; the keys here are {_1} clé inconnue `{k}` ; les clés ici sont {_1}
@msg {_1} is listed twice {_1} figure deux fois
@msg {_1} is not the id of an input object {_1} n’est pas l’identifiant d’un objet d’entrée
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -5546,6 +5546,35 @@ antiAlias Sharp शार्प
@msg the path has no anchor points पाथ में कोई एंकर पॉइंट नहीं है
@msg too many anchor points (limit {MAX_ANCHORS}) बहुत अधिक एंकर पॉइंट (सीमा {MAX_ANCHORS})
@msg true or false true या false
@msg a number >= {_1} एक संख्या >= {_1}
@msg a number > {_1} एक संख्या > {_1}
@msg a number <= {_1} एक संख्या <= {_1}
@msg a number < {_1} एक संख्या < {_1}
@msg a number {_1} to {_2} {_1} से {_2} तक की एक संख्या
@msg a number >= {_1} and < {_2} एक संख्या >= {_1} और < {_2}
@msg a number > {_1} and <= {_2} एक संख्या > {_1} और <= {_2}
@msg a number > {_1} and < {_2} एक संख्या > {_1} और < {_2}
@msg a number ({_1}) एक संख्या ({_1})
@msg a number >= {_1} ({_2}) एक संख्या >= {_1} ({_2})
@msg a number > {_1} ({_2}) एक संख्या > {_1} ({_2})
@msg a number <= {_1} ({_2}) एक संख्या <= {_1} ({_2})
@msg a number < {_1} ({_2}) एक संख्या < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) {_1} से {_2} तक की एक संख्या ({_3})
@msg a number >= {_1} and < {_2} ({_3}) एक संख्या >= {_1} और < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) एक संख्या > {_1} और <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) एक संख्या > {_1} और < {_2} ({_3})
@msg an integer एक पूर्णांक
@msg an integer >= {_1} एक पूर्णांक >= {_1}
@msg an integer <= {_1} एक पूर्णांक <= {_1}
@msg an integer {_1} to {_2} {_1} से {_2} तक का एक पूर्णांक
@msg one of {_1} {_1} में से एक
@msg `{path}` must be one of {_1}, not {got} `{path}` {_1} में से एक होना चाहिए, {got} नहीं
@msg an object id (a non-negative integer) एक ऑब्जेक्ट id (एक गैर-नकारात्मक पूर्णांक)
@msg a list of object ids ऑब्जेक्ट ids की एक सूची
@msg a color (a string, [r, g, b] or an object) एक रंग (एक स्ट्रिंग, [r, g, b] या एक ऑब्जेक्ट)
@msg [x, y] (two numbers) [x, y] (दो संख्याएँ)
@msg an object एक ऑब्जेक्ट
@msg a list एक सूची
@msg unknown key `{k}`; the keys here are {_1} अज्ञात कुंजी `{k}`; यहाँ की कुंजियाँ {_1} हैं
@msg {_1} is listed twice {_1} दो बार सूचीबद्ध है
@msg {_1} is not the id of an input object {_1} किसी इनपुट ऑब्जेक्ट का id नहीं है
Can't render this file because it is too large.
+29
View File
@@ -6376,6 +6376,35 @@ axis Y Axis Y tengely
@msg the path has no anchor points az útvonalnak nincsenek horgonypontjai
@msg too many anchor points (limit {MAX_ANCHORS}) túl sok horgonypont (korlát: {MAX_ANCHORS})
@msg true or false true vagy false
@msg a number >= {_1} szám >= {_1}
@msg a number > {_1} szám > {_1}
@msg a number <= {_1} szám <= {_1}
@msg a number < {_1} szám < {_1}
@msg a number {_1} to {_2} {_1} és {_2} közötti szám
@msg a number >= {_1} and < {_2} szám >= {_1} és < {_2}
@msg a number > {_1} and <= {_2} szám > {_1} és <= {_2}
@msg a number > {_1} and < {_2} szám > {_1} és < {_2}
@msg a number ({_1}) szám ({_1})
@msg a number >= {_1} ({_2}) szám >= {_1} ({_2})
@msg a number > {_1} ({_2}) szám > {_1} ({_2})
@msg a number <= {_1} ({_2}) szám <= {_1} ({_2})
@msg a number < {_1} ({_2}) szám < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) {_1} és {_2} közötti szám ({_3})
@msg a number >= {_1} and < {_2} ({_3}) szám >= {_1} és < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) szám > {_1} és <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) szám > {_1} és < {_2} ({_3})
@msg an integer egész szám
@msg an integer >= {_1} egész szám >= {_1}
@msg an integer <= {_1} egész szám <= {_1}
@msg an integer {_1} to {_2} {_1} és {_2} közötti egész szám
@msg one of {_1} {_1} közül az egyik
@msg `{path}` must be one of {_1}, not {got} `{path}`: {_1} közül az egyik kell, nem ez: {got}
@msg an object id (a non-negative integer) objektumazonosító (nemnegatív egész szám)
@msg a list of object ids objektumazonosítók listája
@msg a color (a string, [r, g, b] or an object) szín (karakterlánc, [r, g, b] vagy objektum)
@msg [x, y] (two numbers) [x, y] (két szám)
@msg an object objektum
@msg a list lista
@msg unknown key `{k}`; the keys here are {_1} ismeretlen kulcs: `{k}`; az itt használható kulcsok: {_1}
@msg {_1} is listed twice {_1} kétszer szerepel
@msg {_1} is not the id of an input object {_1} nem egy bemeneti objektum azonosítója
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4308,6 +4308,7 @@ imageTrace Outline Kontur
@msg `{key}` must be a whole number between {min} and {max} (got {x}) `{key}` harus berupa bilangan bulat antara {min} dan {max} (diperoleh {x})
@msg `{key}` must be between {min} and {max} (got {x}) `{key}` harus di antara {min} dan {max} (diperoleh {x})
@msg `{key}` must be one of {_1} `{key}` harus salah satu dari {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` harus salah satu dari {_1}, bukan {got}
@msg `{key}` must be true or false `{key}` harus true atau false
@msg `{k}` must be [x, y] `{k}` harus [x, y]
@msg `{name}` has no options `{name}` tidak memiliki opsi
Can't render this file because it contains an unexpected character in line 2418 and column 5.
+29
View File
@@ -6018,6 +6018,35 @@ axis Y Axis Asse Y
@msg the path has no anchor points il tracciato non ha punti di ancoraggio
@msg too many anchor points (limit {MAX_ANCHORS}) troppi punti di ancoraggio (limite {MAX_ANCHORS})
@msg true or false true o false
@msg a number >= {_1} un numero >= {_1}
@msg a number > {_1} un numero > {_1}
@msg a number <= {_1} un numero <= {_1}
@msg a number < {_1} un numero < {_1}
@msg a number {_1} to {_2} un numero da {_1} a {_2}
@msg a number >= {_1} and < {_2} un numero >= {_1} e < {_2}
@msg a number > {_1} and <= {_2} un numero > {_1} e <= {_2}
@msg a number > {_1} and < {_2} un numero > {_1} e < {_2}
@msg a number ({_1}) un numero ({_1})
@msg a number >= {_1} ({_2}) un numero >= {_1} ({_2})
@msg a number > {_1} ({_2}) un numero > {_1} ({_2})
@msg a number <= {_1} ({_2}) un numero <= {_1} ({_2})
@msg a number < {_1} ({_2}) un numero < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) un numero da {_1} a {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) un numero >= {_1} e < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) un numero > {_1} e <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) un numero > {_1} e < {_2} ({_3})
@msg an integer un intero
@msg an integer >= {_1} un intero >= {_1}
@msg an integer <= {_1} un intero <= {_1}
@msg an integer {_1} to {_2} un intero da {_1} a {_2}
@msg one of {_1} uno tra {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` deve essere uno tra {_1}, non {got}
@msg an object id (a non-negative integer) un ID di oggetto (un intero non negativo)
@msg a list of object ids un elenco di ID di oggetti
@msg a color (a string, [r, g, b] or an object) un colore (una stringa, [r, g, b] o un oggetto)
@msg [x, y] (two numbers) [x, y] (due numeri)
@msg an object un oggetto
@msg a list un elenco
@msg unknown key `{k}`; the keys here are {_1} chiave sconosciuta `{k}`; le chiavi qui sono {_1}
@msg {_1} is listed twice {_1} è elencato due volte
@msg {_1} is not the id of an input object {_1} non è l’id di un oggetto di input
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6083,6 +6083,35 @@ axis Y Axis Y 軸
@msg the path has no anchor points パスにアンカーポイントがありません
@msg too many anchor points (limit {MAX_ANCHORS}) アンカーポイントが多すぎます (上限 {MAX_ANCHORS})
@msg true or false true または false
@msg a number >= {_1} {_1} 以上の数値
@msg a number > {_1} {_1} より大きい数値
@msg a number <= {_1} {_1} 以下の数値
@msg a number < {_1} {_1} 未満の数値
@msg a number {_1} to {_2} {_1} から {_2} までの数値
@msg a number >= {_1} and < {_2} {_1} 以上 {_2} 未満の数値
@msg a number > {_1} and <= {_2} {_1} より大きく {_2} 以下の数値
@msg a number > {_1} and < {_2} {_1} より大きく {_2} 未満の数値
@msg a number ({_1}) 数値 ({_1})
@msg a number >= {_1} ({_2}) {_1} 以上の数値 ({_2})
@msg a number > {_1} ({_2}) {_1} より大きい数値 ({_2})
@msg a number <= {_1} ({_2}) {_1} 以下の数値 ({_2})
@msg a number < {_1} ({_2}) {_1} 未満の数値 ({_2})
@msg a number {_1} to {_2} ({_3}) {_1} から {_2} までの数値 ({_3})
@msg a number >= {_1} and < {_2} ({_3}) {_1} 以上 {_2} 未満の数値 ({_3})
@msg a number > {_1} and <= {_2} ({_3}) {_1} より大きく {_2} 以下の数値 ({_3})
@msg a number > {_1} and < {_2} ({_3}) {_1} より大きく {_2} 未満の数値 ({_3})
@msg an integer 整数
@msg an integer >= {_1} {_1} 以上の整数
@msg an integer <= {_1} {_1} 以下の整数
@msg an integer {_1} to {_2} {_1} から {_2} までの整数
@msg one of {_1} {_1} のいずれか
@msg `{path}` must be one of {_1}, not {got} `{path}` は {_1} のいずれかにしてください ({got} は使えません)
@msg an object id (a non-negative integer) オブジェクト ID (0 以上の整数)
@msg a list of object ids オブジェクト ID のリスト
@msg a color (a string, [r, g, b] or an object) カラー (文字列、[r, g, b] またはオブジェクト)
@msg [x, y] (two numbers) [x, y] (2 つの数値)
@msg an object オブジェクト
@msg a list リスト
@msg unknown key `{k}`; the keys here are {_1} `{k}` は不明なキーです。ここで使えるキー: {_1}
@msg {_1} is listed twice {_1} が 2 回指定されています
@msg {_1} is not the id of an input object {_1} は入力オブジェクトの ID ではありません
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6344,6 +6344,35 @@ axis Y Axis Y ღერძი
@msg the path has no anchor points ტრაექტორიას საყრდენი წერტილები არ აქვს
@msg too many anchor points (limit {MAX_ANCHORS}) ძალიან ბევრი საყრდენი წერტილი (ლიმიტი {MAX_ANCHORS})
@msg true or false true ან false
@msg a number >= {_1} რიცხვი >= {_1}
@msg a number > {_1} რიცხვი > {_1}
@msg a number <= {_1} რიცხვი <= {_1}
@msg a number < {_1} რიცხვი < {_1}
@msg a number {_1} to {_2} რიცხვი {_1}-დან {_2}-მდე
@msg a number >= {_1} and < {_2} რიცხვი >= {_1} და < {_2}
@msg a number > {_1} and <= {_2} რიცხვი > {_1} და <= {_2}
@msg a number > {_1} and < {_2} რიცხვი > {_1} და < {_2}
@msg a number ({_1}) რიცხვი ({_1})
@msg a number >= {_1} ({_2}) რიცხვი >= {_1} ({_2})
@msg a number > {_1} ({_2}) რიცხვი > {_1} ({_2})
@msg a number <= {_1} ({_2}) რიცხვი <= {_1} ({_2})
@msg a number < {_1} ({_2}) რიცხვი < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) რიცხვი {_1}-დან {_2}-მდე ({_3})
@msg a number >= {_1} and < {_2} ({_3}) რიცხვი >= {_1} და < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) რიცხვი > {_1} და <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) რიცხვი > {_1} და < {_2} ({_3})
@msg an integer მთელი რიცხვი
@msg an integer >= {_1} მთელი რიცხვი >= {_1}
@msg an integer <= {_1} მთელი რიცხვი <= {_1}
@msg an integer {_1} to {_2} მთელი რიცხვი {_1}-დან {_2}-მდე
@msg one of {_1} ერთ-ერთი მნიშვნელობა {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` უნდა იყოს ერთ-ერთი მნიშვნელობა {_1} და არა {got}
@msg an object id (a non-negative integer) ობიექტის იდენტიფიკატორი (არაუარყოფითი მთელი რიცხვი)
@msg a list of object ids ობიექტების იდენტიფიკატორების სია
@msg a color (a string, [r, g, b] or an object) ფერი (სტრიქონი, [r, g, b] ან ობიექტი)
@msg [x, y] (two numbers) [x, y] (ორი რიცხვი)
@msg an object ობიექტი
@msg a list სია
@msg unknown key `{k}`; the keys here are {_1} უცნობი გასაღები `{k}`; აქ გასაღებებია: {_1}
@msg {_1} is listed twice {_1} ორჯერაა მითითებული
@msg {_1} is not the id of an input object {_1} შემავალი ობიექტის ID არ არის
Can't render this file because it is too large.
+29
View File
@@ -5979,6 +5979,35 @@ axis Y Axis Y축
@msg the path has no anchor points 패스에 앵커 포인트가 없습니다
@msg too many anchor points (limit {MAX_ANCHORS}) 앵커 포인트가 너무 많습니다(한도 {MAX_ANCHORS})
@msg true or false true 또는 false
@msg a number >= {_1} {_1} 이상인 숫자
@msg a number > {_1} {_1} 초과인 숫자
@msg a number <= {_1} {_1} 이하인 숫자
@msg a number < {_1} {_1} 미만인 숫자
@msg a number {_1} to {_2} {_1} 이상 {_2} 이하인 숫자
@msg a number >= {_1} and < {_2} {_1} 이상 {_2} 미만인 숫자
@msg a number > {_1} and <= {_2} {_1} 초과 {_2} 이하인 숫자
@msg a number > {_1} and < {_2} {_1} 초과 {_2} 미만인 숫자
@msg a number ({_1}) 숫자({_1})
@msg a number >= {_1} ({_2}) {_1} 이상인 숫자({_2})
@msg a number > {_1} ({_2}) {_1} 초과인 숫자({_2})
@msg a number <= {_1} ({_2}) {_1} 이하인 숫자({_2})
@msg a number < {_1} ({_2}) {_1} 미만인 숫자({_2})
@msg a number {_1} to {_2} ({_3}) {_1} 이상 {_2} 이하인 숫자({_3})
@msg a number >= {_1} and < {_2} ({_3}) {_1} 이상 {_2} 미만인 숫자({_3})
@msg a number > {_1} and <= {_2} ({_3}) {_1} 초과 {_2} 이하인 숫자({_3})
@msg a number > {_1} and < {_2} ({_3}) {_1} 초과 {_2} 미만인 숫자({_3})
@msg an integer 정수
@msg an integer >= {_1} {_1} 이상인 정수
@msg an integer <= {_1} {_1} 이하인 정수
@msg an integer {_1} to {_2} {_1} 이상 {_2} 이하인 정수
@msg one of {_1} {_1} 중 하나
@msg `{path}` must be one of {_1}, not {got} `{path}`은(는) {_1} 중 하나여야 합니다({got} 사용 불가)
@msg an object id (a non-negative integer) 개체 ID(음수가 아닌 정수)
@msg a list of object ids 개체 ID 목록
@msg a color (a string, [r, g, b] or an object) 색상(문자열, [r, g, b] 또는 개체)
@msg [x, y] (two numbers) [x, y](숫자 두 개)
@msg an object 개체
@msg a list 목록
@msg unknown key `{k}`; the keys here are {_1} 알 수 없는 키 `{k}`: 여기서 사용할 수 있는 키: {_1}
@msg {_1} is listed twice {_1}이(가) 두 번 나열되었습니다
@msg {_1} is not the id of an input object {_1}은(는) 입력 개체의 ID가 아닙니다
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -4322,6 +4322,7 @@ imageTrace Outline Contour
@msg `{key}` must be a whole number between {min} and {max} (got {x}) `{key}` moet een geheel getal tussen {min} en {max} zijn (kreeg {x})
@msg `{key}` must be between {min} and {max} (got {x}) `{key}` moet tussen {min} en {max} liggen (kreeg {x})
@msg `{key}` must be one of {_1} `{key}` moet een van {_1} zijn
@msg `{path}` must be one of {_1}, not {got} `{path}` moet een van {_1} zijn, niet {got}
@msg `{key}` must be true or false `{key}` moet true of false zijn
@msg `{k}` must be [x, y] `{k}` moet [x, y] zijn
@msg `{name}` has no options `{name}` heeft geen opties
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6247,6 +6247,35 @@ axis Y Axis Oś Y
@msg the path has no anchor points ścieżka nie ma punktów kontrolnych
@msg too many anchor points (limit {MAX_ANCHORS}) za dużo punktów kontrolnych (limit {MAX_ANCHORS})
@msg true or false true lub false
@msg a number >= {_1} liczbą >= {_1}
@msg a number > {_1} liczbą > {_1}
@msg a number <= {_1} liczbą <= {_1}
@msg a number < {_1} liczbą < {_1}
@msg a number {_1} to {_2} liczbą od {_1} do {_2}
@msg a number >= {_1} and < {_2} liczbą >= {_1} i < {_2}
@msg a number > {_1} and <= {_2} liczbą > {_1} i <= {_2}
@msg a number > {_1} and < {_2} liczbą > {_1} i < {_2}
@msg a number ({_1}) liczbą ({_1})
@msg a number >= {_1} ({_2}) liczbą >= {_1} ({_2})
@msg a number > {_1} ({_2}) liczbą > {_1} ({_2})
@msg a number <= {_1} ({_2}) liczbą <= {_1} ({_2})
@msg a number < {_1} ({_2}) liczbą < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) liczbą od {_1} do {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) liczbą >= {_1} i < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) liczbą > {_1} i <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) liczbą > {_1} i < {_2} ({_3})
@msg an integer liczbą całkowitą
@msg an integer >= {_1} liczbą całkowitą >= {_1}
@msg an integer <= {_1} liczbą całkowitą <= {_1}
@msg an integer {_1} to {_2} liczbą całkowitą od {_1} do {_2}
@msg one of {_1} jedną z wartości {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` musi być jedną z wartości {_1}, a nie {got}
@msg an object id (a non-negative integer) identyfikatorem obiektu (nieujemną liczbą całkowitą)
@msg a list of object ids listą identyfikatorów obiektów
@msg a color (a string, [r, g, b] or an object) kolorem (ciągiem znaków, [r, g, b] lub obiektem)
@msg [x, y] (two numbers) [x, y] (dwiema liczbami)
@msg an object obiektem
@msg a list listą
@msg unknown key `{k}`; the keys here are {_1} nieznany klucz `{k}`; klucze w tym miejscu to {_1}
@msg {_1} is listed twice {_1} występuje dwa razy
@msg {_1} is not the id of an input object {_1} nie jest identyfikatorem obiektu wejściowego
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6308,6 +6308,35 @@ axis Y Axis Eixo Y
@msg the path has no anchor points o caminho não tem pontos de ancoragem
@msg too many anchor points (limit {MAX_ANCHORS}) pontos de ancoragem demais (limite {MAX_ANCHORS})
@msg true or false true ou false
@msg a number >= {_1} um número >= {_1}
@msg a number > {_1} um número > {_1}
@msg a number <= {_1} um número <= {_1}
@msg a number < {_1} um número < {_1}
@msg a number {_1} to {_2} um número de {_1} a {_2}
@msg a number >= {_1} and < {_2} um número >= {_1} e < {_2}
@msg a number > {_1} and <= {_2} um número > {_1} e <= {_2}
@msg a number > {_1} and < {_2} um número > {_1} e < {_2}
@msg a number ({_1}) um número ({_1})
@msg a number >= {_1} ({_2}) um número >= {_1} ({_2})
@msg a number > {_1} ({_2}) um número > {_1} ({_2})
@msg a number <= {_1} ({_2}) um número <= {_1} ({_2})
@msg a number < {_1} ({_2}) um número < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) um número de {_1} a {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) um número >= {_1} e < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) um número > {_1} e <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) um número > {_1} e < {_2} ({_3})
@msg an integer um inteiro
@msg an integer >= {_1} um inteiro >= {_1}
@msg an integer <= {_1} um inteiro <= {_1}
@msg an integer {_1} to {_2} um inteiro de {_1} a {_2}
@msg one of {_1} um de {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` deve ser um de {_1}, não {got}
@msg an object id (a non-negative integer) um ID de objeto (um inteiro não negativo)
@msg a list of object ids uma lista de IDs de objeto
@msg a color (a string, [r, g, b] or an object) uma cor (uma string, [r, g, b] ou um objeto)
@msg [x, y] (two numbers) [x, y] (dois números)
@msg an object um objeto
@msg a list uma lista
@msg unknown key `{k}`; the keys here are {_1} chave desconhecida `{k}`; as chaves aqui são {_1}
@msg {_1} is listed twice {_1} aparece duas vezes
@msg {_1} is not the id of an input object {_1} não é o id de um objeto de entrada
Can't render this file because it contains an unexpected character in line 6 and column 47.
+29
View File
@@ -6004,6 +6004,35 @@ axis Y Axis Ось Y
@msg the path has no anchor points у контура нет опорных точек
@msg too many anchor points (limit {MAX_ANCHORS}) слишком много опорных точек (предел {MAX_ANCHORS})
@msg true or false true или false
@msg a number >= {_1} число >= {_1}
@msg a number > {_1} число > {_1}
@msg a number <= {_1} число <= {_1}
@msg a number < {_1} число < {_1}
@msg a number {_1} to {_2} число от {_1} до {_2}
@msg a number >= {_1} and < {_2} число >= {_1} и < {_2}
@msg a number > {_1} and <= {_2} число > {_1} и <= {_2}
@msg a number > {_1} and < {_2} число > {_1} и < {_2}
@msg a number ({_1}) число ({_1})
@msg a number >= {_1} ({_2}) число >= {_1} ({_2})
@msg a number > {_1} ({_2}) число > {_1} ({_2})
@msg a number <= {_1} ({_2}) число <= {_1} ({_2})
@msg a number < {_1} ({_2}) число < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) число от {_1} до {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) число >= {_1} и < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) число > {_1} и <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) число > {_1} и < {_2} ({_3})
@msg an integer целое число
@msg an integer >= {_1} целое число >= {_1}
@msg an integer <= {_1} целое число <= {_1}
@msg an integer {_1} to {_2} целое число от {_1} до {_2}
@msg one of {_1} одно из значений {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` должно быть одним из значений {_1}, а не {got}
@msg an object id (a non-negative integer) идентификатор объекта (неотрицательное целое число)
@msg a list of object ids список идентификаторов объектов
@msg a color (a string, [r, g, b] or an object) цвет (строка, [r, g, b] или объект)
@msg [x, y] (two numbers) [x, y] (два числа)
@msg an object объект
@msg a list список
@msg unknown key `{k}`; the keys here are {_1} неизвестный ключ `{k}`; здесь допустимы ключи {_1}
@msg {_1} is listed twice {_1} указан дважды
@msg {_1} is not the id of an input object {_1} не является идентификатором входного объекта
Can't render this file because it is too large.
+29
View File
@@ -6379,6 +6379,35 @@ axis Y Axis Y-axel
@msg the path has no anchor points banan har inga ankarpunkter
@msg too many anchor points (limit {MAX_ANCHORS}) för många ankarpunkter (gräns {MAX_ANCHORS})
@msg true or false true eller false
@msg a number >= {_1} ett tal >= {_1}
@msg a number > {_1} ett tal > {_1}
@msg a number <= {_1} ett tal <= {_1}
@msg a number < {_1} ett tal < {_1}
@msg a number {_1} to {_2} ett tal från {_1} till {_2}
@msg a number >= {_1} and < {_2} ett tal >= {_1} och < {_2}
@msg a number > {_1} and <= {_2} ett tal > {_1} och <= {_2}
@msg a number > {_1} and < {_2} ett tal > {_1} och < {_2}
@msg a number ({_1}) ett tal ({_1})
@msg a number >= {_1} ({_2}) ett tal >= {_1} ({_2})
@msg a number > {_1} ({_2}) ett tal > {_1} ({_2})
@msg a number <= {_1} ({_2}) ett tal <= {_1} ({_2})
@msg a number < {_1} ({_2}) ett tal < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) ett tal från {_1} till {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) ett tal >= {_1} och < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) ett tal > {_1} och <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) ett tal > {_1} och < {_2} ({_3})
@msg an integer ett heltal
@msg an integer >= {_1} ett heltal >= {_1}
@msg an integer <= {_1} ett heltal <= {_1}
@msg an integer {_1} to {_2} ett heltal från {_1} till {_2}
@msg one of {_1} ett av {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` måste vara ett av {_1}, inte {got}
@msg an object id (a non-negative integer) ett objekt-id (ett icke-negativt heltal)
@msg a list of object ids en lista med objekt-id:n
@msg a color (a string, [r, g, b] or an object) en färg (en sträng, [r, g, b] eller ett objekt)
@msg [x, y] (two numbers) [x, y] (två tal)
@msg an object ett objekt
@msg a list en lista
@msg unknown key `{k}`; the keys here are {_1} okänd nyckel `{k}`; nycklarna här är {_1}
@msg {_1} is listed twice {_1} finns två gånger
@msg {_1} is not the id of an input object {_1} är inte id:t för ett indataobjekt
Can't render this file because it is too large.
+154
View File
@@ -2915,6 +2915,14 @@ fn parameter_schema_errors_are_translated() {
s.execute("file.new", &json!({})).unwrap();
let errors = [
(s.execute("view.saved.new", &json!({"center": [0, 0], "zoom": -1})).unwrap_err().to_string(), "`zoom`", "must be", "-1"),
(s.execute("view.saved.new", &json!({"center": [0, 0], "zoom": -1})).unwrap_err().to_string(), "`zoom`", "a number > 0", "-1"),
(s.execute("view.saved.new", &json!({"center": 5, "zoom": 1})).unwrap_err().to_string(), "`center`", "two numbers", "5"),
(
s.execute("view.saved.new", &json!({"center": [0, 0], "zoom": 1, "rotation": "x"})).unwrap_err().to_string(),
"`rotation`",
"a number (deg)",
"\"x\"",
),
(s.execute("view.saved.new", &json!({"center": [0, 0]})).unwrap_err().to_string(), "`zoom`", "missing", ""),
(s.execute("view.saved.list", &json!(5)).unwrap_err().to_string(), "5", "must be", ""),
];
@@ -2936,6 +2944,152 @@ fn parameter_schema_errors_are_translated() {
}
}
/// The phrases a parameter schema's error uses for what a value must be, as `@msg` sources: one
/// for each type, and for a number each range and unit form.
const SCHEMA_PHRASES: &[&str] = &[
"a number",
"a number >= {_1}",
"a number > {_1}",
"a number <= {_1}",
"a number < {_1}",
"a number {_1} to {_2}",
"a number >= {_1} and < {_2}",
"a number > {_1} and <= {_2}",
"a number > {_1} and < {_2}",
"a number ({_1})",
"a number >= {_1} ({_2})",
"a number > {_1} ({_2})",
"a number <= {_1} ({_2})",
"a number < {_1} ({_2})",
"a number {_1} to {_2} ({_3})",
"a number >= {_1} and < {_2} ({_3})",
"a number > {_1} and <= {_2} ({_3})",
"a number > {_1} and < {_2} ({_3})",
"an integer",
"an integer >= {_1}",
"an integer <= {_1}",
"an integer {_1} to {_2}",
"true or false",
"a string",
"one of {_1}",
"an object id (a non-negative integer)",
"a list of object ids",
"a color (a string, [r, g, b] or an object)",
"[x, y] (two numbers)",
"an object",
"a list",
];
/// What a value of each parameter type must be is translated in every language that translates
/// every message, for every range and unit of a number: the matched row's placeholders take the
/// bounds, the unit and the names exactly as the English gives them, and the whole error keeps
/// the parameter's path and the refused value.
#[test]
fn parameter_schema_expected_phrases_are_translated() {
use serde_json::{Value, json};
use vectorcraft_apischema::{Bound, Param, ParamSchema, Problem, Type};
let number = |min, max, unit| Type::Number { min, max, unit };
let (incl, excl) = (|x| Some(Bound::Inclusive(x)), |x| Some(Bound::Exclusive(x)));
// (type, a value it refuses, the placeholder values of the phrase's row)
let cases: Vec<(Type, Value, Vec<&str>)> = vec![
(Type::NUMBER, json!("x"), vec![]),
(number(incl(-2.5), None, None), json!(-3), vec!["-2.5"]),
(number(excl(0.0), None, None), json!(0), vec!["0"]),
(number(None, incl(1.5), None), json!(2), vec!["1.5"]),
(number(None, excl(100.0), None), json!(100), vec!["100"]),
(number(incl(-1.0), incl(1.0), None), json!(2), vec!["-1", "1"]),
(number(incl(0.0), excl(360.0), None), json!(360), vec!["0", "360"]),
(number(excl(0.0), incl(1.0), None), json!(0), vec!["0", "1"]),
(number(excl(-0.5), excl(0.5), None), json!(1), vec!["-0.5", "0.5"]),
(number(None, None, Some("deg")), json!("x"), vec!["deg"]),
(number(incl(0.25), None, Some("pt")), json!(0), vec!["0.25", "pt"]),
(number(excl(0.0), None, Some("pt")), json!(0), vec!["0", "pt"]),
(number(None, incl(-1.0), Some("mm")), json!(0), vec!["-1", "mm"]),
(number(None, excl(10.0), Some("px")), json!(10), vec!["10", "px"]),
(number(incl(0.0), incl(100.0), Some("%")), json!(101), vec!["0", "100", "%"]),
(number(incl(-180.0), excl(180.0), Some("deg")), json!(180), vec!["-180", "180", "deg"]),
(number(excl(0.0), incl(1000.0), Some("pt")), json!(0), vec!["0", "1000", "pt"]),
(number(excl(-1.0), excl(1.0), Some("in")), json!(1), vec!["-1", "1", "in"]),
(Type::Integer { min: None, max: None }, json!(1.5), vec![]),
(Type::Integer { min: Some(1), max: None }, json!(0), vec!["1"]),
(Type::Integer { min: None, max: Some(-1) }, json!(0), vec!["-1"]),
(Type::Integer { min: Some(1), max: Some(25) }, json!(26), vec!["1", "25"]),
(Type::Boolean, json!(1), vec![]),
(Type::String, json!(1), vec![]),
(Type::Enum(&["left", "center", "right"]), json!("top"), vec![r#""left", "center", "right""#]),
(Type::Enum(&["only"]), json!("other"), vec![r#""only""#]),
(Type::Id, json!(-1), vec![]),
(Type::Ids, json!(5), vec![]),
(Type::Color, json!(5), vec![]),
(Type::Point, json!(5), vec![]),
(Type::Object(&[]), json!(5), vec![]),
(Type::Array(&Type::NUMBER), json!(5), vec![]),
];
let one = |name: &'static str, ty: Type| ParamSchema::new(Box::leak(Box::new([Param::new(name, ty)])), "");
let inner: &'static [Param] = Box::leak(Box::new([Param::new("zoom", number(excl(0.0), None, None))]));
let nested = one("edits", Type::Array(Box::leak(Box::new(Type::Object(inner)))));
let mut errors: Vec<_> = cases.iter().map(|(ty, bad, caps)| (one("x", *ty).validate(&json!({ "x": bad })), caps.clone())).collect();
errors.push((nested.validate(&json!({"edits": [{"zoom": 1}, {"zoom": -1}]})), vec!["0"]));
let mut seen = std::collections::BTreeSet::new();
for code in COMPLETE_MESSAGES {
let lang = Lang::from_code(code).expect("registered");
let (entries, _) = parse_entries(lang.0.source);
for phrase in SCHEMA_PHRASES {
assert!(entries.iter().any(|(ctx, src, _)| ctx == "@msg" && src == phrase), "{code}: no row for {phrase:?}");
}
for (result, caps) in &errors {
let Err(e) = result else { panic!("accepted: {result:?}") };
let Problem::WrongType { expected, got } = &e.problem else { panic!("{e}") };
seen.insert(expected.clone());
let (_, matched) = lang.catalog().message(expected).unwrap_or_else(|| panic!("{code}: no row matches {expected:?}"));
let values: Vec<&str> = matched.iter().map(|(_, v)| *v).collect();
assert_eq!(&values, caps, "{code}: {expected:?}");
let phrase = message(lang, expected);
assert_ne!(&phrase, expected, "{code}");
let mut from = 0;
for value in caps {
let at = phrase[from..].find(value).unwrap_or_else(|| panic!("{code}: {value:?} in {expected:?} -> {phrase:?}"));
from += at + value.len();
}
let shown = message(lang, &e.to_string());
let path = format!("`{}`", e.path);
let kept = caps.iter().all(|value| shown.contains(value));
assert!(kept && shown.contains(&path) && shown.contains(got.as_str()), "{code}: {shown}");
assert!(!holds_word(&shown, expected) && !shown.contains("must be") && !shown.contains(", not "), "{code}: {shown}");
}
}
// A catalog's `{key}` must be one of {_1}` row would take `"a", "b", not "c"` as its list.
let enum_error = one("x", Type::Enum(&["a", "b"])).validate(&json!({"x": "c"})).map_or_else(|e| e.to_string(), |_| String::new());
assert_eq!(enum_error, r#"`x` must be one of "a", "b", not "c""#);
for lang in Lang::all().filter(|l| l.code() != Lang::EN.code() && !l.0.source.is_empty()) {
let shown = message(lang, &enum_error);
assert!(!shown.contains(", not ") && shown.contains(r#""a", "b""#) && shown.contains(r#""c""#), "{}: {shown}", lang.code());
}
for phrase in
["a number > -0.5 and < 0.5", "a number 0 to 100 (%)", "an integer 1 to 25", r#"one of "left", "center", "right""#, "[x, y] (two numbers)"]
{
assert!(seen.contains(phrase), "{phrase:?} not in {seen:?}");
}
}
/// A JSON object or array inside a translated message stays as it is, and an exact message that
/// starts with a bracket is still translated.
#[test]
fn bracketed_message_parts_translate_only_as_exact_messages() {
for code in COMPLETE_MESSAGES {
let lang = Lang::from_code(code).expect("registered");
let point = message(lang, "[x, y] (two numbers)");
assert_ne!(point, "[x, y] (two numbers)", "{code}");
assert!(point.contains("[x, y]"), "{code}: {point}");
for got in ["[1]", "[1, 2, 3]", r#"{"objects": [1]}"#, r#"[{"a": 1}, "b: c", …"#] {
let shown = message(lang, &format!("`center` must be [x, y] (two numbers), not {got}"));
assert!(shown.contains(&point) && shown.contains(got), "{code}: {shown}");
let shown = message(lang, &format!("`p` must be an object, not {got}"));
assert!(shown.contains(got) && !shown.contains("an object"), "{code}: {shown}");
}
}
}
/// The warning for a PDF/X file that leaves out the document's bleed is translated in every catalog,
/// alone and in the status bar's note.
#[test]
+29
View File
@@ -6349,6 +6349,35 @@ axis Y Axis Y ekseni
@msg the path has no anchor points yolun bağlantı noktası yok
@msg too many anchor points (limit {MAX_ANCHORS}) çok fazla bağlantı noktası (sınır {MAX_ANCHORS})
@msg true or false true veya false
@msg a number >= {_1} bir sayı >= {_1}
@msg a number > {_1} bir sayı > {_1}
@msg a number <= {_1} bir sayı <= {_1}
@msg a number < {_1} bir sayı < {_1}
@msg a number {_1} to {_2} {_1} ile {_2} arasında bir sayı
@msg a number >= {_1} and < {_2} bir sayı >= {_1} ve < {_2}
@msg a number > {_1} and <= {_2} bir sayı > {_1} ve <= {_2}
@msg a number > {_1} and < {_2} bir sayı > {_1} ve < {_2}
@msg a number ({_1}) bir sayı ({_1})
@msg a number >= {_1} ({_2}) bir sayı >= {_1} ({_2})
@msg a number > {_1} ({_2}) bir sayı > {_1} ({_2})
@msg a number <= {_1} ({_2}) bir sayı <= {_1} ({_2})
@msg a number < {_1} ({_2}) bir sayı < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) {_1} ile {_2} arasında bir sayı ({_3})
@msg a number >= {_1} and < {_2} ({_3}) bir sayı >= {_1} ve < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) bir sayı > {_1} ve <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) bir sayı > {_1} ve < {_2} ({_3})
@msg an integer bir tam sayı
@msg an integer >= {_1} bir tam sayı >= {_1}
@msg an integer <= {_1} bir tam sayı <= {_1}
@msg an integer {_1} to {_2} {_1} ile {_2} arasında bir tam sayı
@msg one of {_1} {_1} değerlerinden biri
@msg `{path}` must be one of {_1}, not {got} `{path}` {_1} değerlerinden biri olmalıdır, {got} değil
@msg an object id (a non-negative integer) bir nesne kimliği (negatif olmayan bir tam sayı)
@msg a list of object ids bir nesne kimlikleri listesi
@msg a color (a string, [r, g, b] or an object) bir renk (bir dize, [r, g, b] veya bir nesne)
@msg [x, y] (two numbers) [x, y] (iki sayı)
@msg an object bir nesne
@msg a list bir liste
@msg unknown key `{k}`; the keys here are {_1} bilinmeyen anahtar `{k}`; buradaki anahtarlar: {_1}
@msg {_1} is listed twice {_1} iki kez listelenmiş
@msg {_1} is not the id of an input object {_1} bir girdi nesnesinin kimliği değil
Can't render this file because it contains an unexpected character in line 5 and column 25.
+29
View File
@@ -5998,6 +5998,35 @@ axis Y Axis Вісь Y
@msg the path has no anchor points контур не має опорних точок
@msg too many anchor points (limit {MAX_ANCHORS}) забагато опорних точок (межа {MAX_ANCHORS})
@msg true or false true або false
@msg a number >= {_1} число >= {_1}
@msg a number > {_1} число > {_1}
@msg a number <= {_1} число <= {_1}
@msg a number < {_1} число < {_1}
@msg a number {_1} to {_2} число від {_1} до {_2}
@msg a number >= {_1} and < {_2} число >= {_1} і < {_2}
@msg a number > {_1} and <= {_2} число > {_1} і <= {_2}
@msg a number > {_1} and < {_2} число > {_1} і < {_2}
@msg a number ({_1}) число ({_1})
@msg a number >= {_1} ({_2}) число >= {_1} ({_2})
@msg a number > {_1} ({_2}) число > {_1} ({_2})
@msg a number <= {_1} ({_2}) число <= {_1} ({_2})
@msg a number < {_1} ({_2}) число < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) число від {_1} до {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) число >= {_1} і < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) число > {_1} і <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) число > {_1} і < {_2} ({_3})
@msg an integer ціле число
@msg an integer >= {_1} ціле число >= {_1}
@msg an integer <= {_1} ціле число <= {_1}
@msg an integer {_1} to {_2} ціле число від {_1} до {_2}
@msg one of {_1} одне зі значень {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` має бути одним зі значень {_1}, а не {got}
@msg an object id (a non-negative integer) ідентифікатор об’єкта (невід’ємне ціле число)
@msg a list of object ids список ідентифікаторів об’єктів
@msg a color (a string, [r, g, b] or an object) колір (рядок, [r, g, b] або об’єкт)
@msg [x, y] (two numbers) [x, y] (два числа)
@msg an object об’єкт
@msg a list список
@msg unknown key `{k}`; the keys here are {_1} невідомий ключ `{k}`; тут допустимі ключі {_1}
@msg {_1} is listed twice {_1} вказано двічі
@msg {_1} is not the id of an input object {_1} не є ідентифікатором вхідного об’єкта
Can't render this file because it is too large.
+29
View File
@@ -5999,6 +5999,35 @@ axis Y Axis Trục Y
@msg the path has no anchor points đường dẫn không có điểm neo
@msg too many anchor points (limit {MAX_ANCHORS}) quá nhiều điểm neo (giới hạn {MAX_ANCHORS})
@msg true or false true hoặc false
@msg a number >= {_1} một số >= {_1}
@msg a number > {_1} một số > {_1}
@msg a number <= {_1} một số <= {_1}
@msg a number < {_1} một số < {_1}
@msg a number {_1} to {_2} một số từ {_1} đến {_2}
@msg a number >= {_1} and < {_2} một số >= {_1} và < {_2}
@msg a number > {_1} and <= {_2} một số > {_1} và <= {_2}
@msg a number > {_1} and < {_2} một số > {_1} và < {_2}
@msg a number ({_1}) một số ({_1})
@msg a number >= {_1} ({_2}) một số >= {_1} ({_2})
@msg a number > {_1} ({_2}) một số > {_1} ({_2})
@msg a number <= {_1} ({_2}) một số <= {_1} ({_2})
@msg a number < {_1} ({_2}) một số < {_1} ({_2})
@msg a number {_1} to {_2} ({_3}) một số từ {_1} đến {_2} ({_3})
@msg a number >= {_1} and < {_2} ({_3}) một số >= {_1} và < {_2} ({_3})
@msg a number > {_1} and <= {_2} ({_3}) một số > {_1} và <= {_2} ({_3})
@msg a number > {_1} and < {_2} ({_3}) một số > {_1} và < {_2} ({_3})
@msg an integer một số nguyên
@msg an integer >= {_1} một số nguyên >= {_1}
@msg an integer <= {_1} một số nguyên <= {_1}
@msg an integer {_1} to {_2} một số nguyên từ {_1} đến {_2}
@msg one of {_1} một trong các giá trị {_1}
@msg `{path}` must be one of {_1}, not {got} `{path}` phải là một trong các giá trị {_1}, không phải {got}
@msg an object id (a non-negative integer) một ID đối tượng (một số nguyên không âm)
@msg a list of object ids một danh sách ID đối tượng
@msg a color (a string, [r, g, b] or an object) một màu (một chuỗi, [r, g, b] hoặc một đối tượng)
@msg [x, y] (two numbers) [x, y] (hai số)
@msg an object một đối tượng
@msg a list một danh sách
@msg unknown key `{k}`; the keys here are {_1} khóa không xác định `{k}`; các khóa ở đây là {_1}
@msg {_1} is listed twice {_1} được liệt kê hai lần
@msg {_1} is not the id of an input object {_1} không phải là id của một đối tượng đầu vào
Can't render this file because it contains an unexpected character in line 204 and column 5.
+29
View File
@@ -6231,6 +6231,35 @@ axis Y Axis Y 轴
@msg the path has no anchor points 路径没有锚点
@msg too many anchor points (limit {MAX_ANCHORS}) 锚点过多(上限 {MAX_ANCHORS})
@msg true or false true 或 false
@msg a number >= {_1} 大于或等于 {_1} 的数字
@msg a number > {_1} 大于 {_1} 的数字
@msg a number <= {_1} 小于或等于 {_1} 的数字
@msg a number < {_1} 小于 {_1} 的数字
@msg a number {_1} to {_2} {_1} 到 {_2} 之间的数字
@msg a number >= {_1} and < {_2} 大于或等于 {_1} 且小于 {_2} 的数字
@msg a number > {_1} and <= {_2} 大于 {_1} 且小于或等于 {_2} 的数字
@msg a number > {_1} and < {_2} 大于 {_1} 且小于 {_2} 的数字
@msg a number ({_1}) 数字({_1})
@msg a number >= {_1} ({_2}) 大于或等于 {_1} 的数字({_2})
@msg a number > {_1} ({_2}) 大于 {_1} 的数字({_2})
@msg a number <= {_1} ({_2}) 小于或等于 {_1} 的数字({_2})
@msg a number < {_1} ({_2}) 小于 {_1} 的数字({_2})
@msg a number {_1} to {_2} ({_3}) {_1} 到 {_2} 之间的数字({_3})
@msg a number >= {_1} and < {_2} ({_3}) 大于或等于 {_1} 且小于 {_2} 的数字({_3})
@msg a number > {_1} and <= {_2} ({_3}) 大于 {_1} 且小于或等于 {_2} 的数字({_3})
@msg a number > {_1} and < {_2} ({_3}) 大于 {_1} 且小于 {_2} 的数字({_3})
@msg an integer 整数
@msg an integer >= {_1} 大于或等于 {_1} 的整数
@msg an integer <= {_1} 小于或等于 {_1} 的整数
@msg an integer {_1} to {_2} {_1} 到 {_2} 之间的整数
@msg one of {_1} {_1} 之一
@msg `{path}` must be one of {_1}, not {got} `{path}` 必须是 {_1} 之一,而不是 {got}
@msg an object id (a non-negative integer) 对象 ID(非负整数)
@msg a list of object ids 对象 ID 列表
@msg a color (a string, [r, g, b] or an object) 颜色(字符串、[r, g, b] 或对象)
@msg [x, y] (two numbers) [x, y](两个数字)
@msg an object 对象
@msg a list 列表
@msg unknown key `{k}`; the keys here are {_1} 未知键 `{k}`;此处可用的键:{_1}
@msg {_1} is listed twice {_1} 列出了两次
@msg {_1} is not the id of an input object {_1} 不是输入对象的 ID
Can't render this file because it contains an unexpected character in line 2 and column 73.
+29
View File
@@ -6036,6 +6036,35 @@ axis Y Axis Y 軸
@msg the path has no anchor points 路徑沒有錨點
@msg too many anchor points (limit {MAX_ANCHORS}) 錨點過多(上限 {MAX_ANCHORS})
@msg true or false true 或 false
@msg a number >= {_1} 大於或等於 {_1} 的數字
@msg a number > {_1} 大於 {_1} 的數字
@msg a number <= {_1} 小於或等於 {_1} 的數字
@msg a number < {_1} 小於 {_1} 的數字
@msg a number {_1} to {_2} 介於 {_1} 到 {_2} 之間的數字
@msg a number >= {_1} and < {_2} 大於或等於 {_1} 且小於 {_2} 的數字
@msg a number > {_1} and <= {_2} 大於 {_1} 且小於或等於 {_2} 的數字
@msg a number > {_1} and < {_2} 大於 {_1} 且小於 {_2} 的數字
@msg a number ({_1}) 數字({_1})
@msg a number >= {_1} ({_2}) 大於或等於 {_1} 的數字({_2})
@msg a number > {_1} ({_2}) 大於 {_1} 的數字({_2})
@msg a number <= {_1} ({_2}) 小於或等於 {_1} 的數字({_2})
@msg a number < {_1} ({_2}) 小於 {_1} 的數字({_2})
@msg a number {_1} to {_2} ({_3}) 介於 {_1} 到 {_2} 之間的數字({_3})
@msg a number >= {_1} and < {_2} ({_3}) 大於或等於 {_1} 且小於 {_2} 的數字({_3})
@msg a number > {_1} and <= {_2} ({_3}) 大於 {_1} 且小於或等於 {_2} 的數字({_3})
@msg a number > {_1} and < {_2} ({_3}) 大於 {_1} 且小於 {_2} 的數字({_3})
@msg an integer 整數
@msg an integer >= {_1} 大於或等於 {_1} 的整數
@msg an integer <= {_1} 小於或等於 {_1} 的整數
@msg an integer {_1} to {_2} 介於 {_1} 到 {_2} 之間的整數
@msg one of {_1} {_1} 其中之一
@msg `{path}` must be one of {_1}, not {got} `{path}` 必須是 {_1} 其中之一,而不是 {got}
@msg an object id (a non-negative integer) 物件 ID(非負整數)
@msg a list of object ids 物件 ID 清單
@msg a color (a string, [r, g, b] or an object) 顏色(字串、[r, g, b] 或物件)
@msg [x, y] (two numbers) [x, y](兩個數字)
@msg an object 物件
@msg a list 清單
@msg unknown key `{k}`; the keys here are {_1} 未知的鍵 `{k}`;此處可用的鍵:{_1}
@msg {_1} is listed twice {_1} 列出了兩次
@msg {_1} is not the id of an input object {_1} 不是輸入物件的 ID
Can't render this file because it contains an unexpected character in line 6 and column 47.
+5
View File
@@ -1823,6 +1823,11 @@ parameter error, ``invalid parameters for `<id>`: `<path>` is nested too deeply`
value. A schema that is wrong in itself, such as one that nests past 16 levels or puts a list of ids or a point
inside 16 lists, is an internal error in the command, and the command does not run.
The command API returns these errors in English. The desktop app's status bar shows them in the interface language,
the requirement after "must be" included (a number and its range and unit, an integer, a list of names, an object id,
a color, a point, an object or a list); the parameter's path, the refused value, the bounds, the unit and the names stay
as the English gives them.
An omitted value with a `default` takes it (`rotation` 0 in `view.saved.new`); the journal keeps the params as they
were given. Saved steps played from a journal or an action keep a key the schema does not name, unless its value nests
more than 16 levels deep, and the values of the parameters it names are checked as in a new call. The schemas of built-in commands belong to API level 3
+1
View File
@@ -867,6 +867,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur
- The errors of the blend spine commands (Move Spine Point, Reshape Spine Segment, Add Spine Point and Delete Spine Point) show in the status bar in the interface language: each has a row in every catalog that translates all status and error messages and in Bulgarian (`blend_spine_param_errors_are_translated`).
- The errors of the 3D effects (Extrude & Bevel, Revolve, Inflate, Rotate and their Classic forms) show in the status bar in the interface language: the art a 3D effect cannot build a solid from, invalid light, graphics and surface settings, and the notes for an object that draws no 3D faces or more wireframe edges than the limit. Each has a row in every catalog that translates all status and error messages, and the effect's name and the values in the message are translated or kept as written (`three_d_refusals_are_translated_in_every_complete_catalog`, `three_d_refusals_translate_with_their_values`).
- The errors of the parameter checks that many commands share show in the status bar in the interface language: a value that is not a number where a number goes (`object.move` with `"dx": "60 mm"`, and `object.rotate`, `object.setBounds` and the other commands that call `check_numbers`), a missing number or index, `ids` that are not a list of object ids, an object id that is not a non-negative integer or names no object, and a date that is not Unix seconds. Each has a row in every catalog that translates all status and error messages, and in Bulgarian, Danish, Indonesian and Dutch (`shared_param_check_errors_are_translated`).
- A parameter schema's errors show in the status bar with what the value must be in the interface language, for every type a schema has (a number with each kind of range and with a unit, an integer and its range, true or false, a string, a list of names, an object id, a list of object ids, a color, a point, an object and a list), in every catalog that translates all status and error messages; the path, the refused value, the bounds, the unit and the names stay as the English gives them. The error for a value that is not one of its names is also translated in Bulgarian, Bosnian, Danish, Indonesian and Dutch (`parameter_schema_expected_phrases_are_translated`, `bracketed_message_parts_translate_only_as_exact_messages`).
- Export commands run through MCP, the control channel or the CLI refuse a key that no format takes, and a command that writes one format (`document.exportPdf`, `document.exportEps`, `document.exportDxf`) or takes one format's options (`document.pdfSettings`, `pdf.preset.save`) refuses a key that format doesn't take. An unknown key inside `marks`, `bleed`, `compression`, `output`, `advanced`, `security` or `flattener` is refused by its path.
- Save commands run through MCP, the control channel or the CLI (`document.save`, `file.saveAs`, `file.saveCopy`, `file.saveAsTemplate`, `app.save`) refuse a key that no save format takes, beside the path or in `options`. Export for Screens refuses a key it doesn't take, and a key that no format takes in a format row or in a format's settings, by its path (`formats[1].marks.useDocumentBleed`); Export Assets (`assets.export`, `assets.settings.set`) checks the rows and settings it is given the same way.
- Commands that read their `ids` (or `slices`) list themselves refuse a list with an entry that is not a non-negative integer, and a value that is not a list, and change nothing; they no longer drop the entry and act on the rest (Copy Appearance From, the Edit Colors commands and Overprint Black, Find and Replace, `layer.highlight`, `layer.move`, `library.add`, the Links panel commands, `object.transform`, Make Pattern, the Repeat commands, the slice commands, Join, Average and Join, `plugin.run`, `symbol.edit`, Make Opacity Mask; `tests::ids_without_selection::an_ids_entry_that_is_not_an_id_is_refused_and_changes_nothing`). The error for an entry of an object id list names the key, the entry and its value ("`ids` entry 1 is true, not a non-negative integer object id"), with a row in every catalog that has the other object id errors.