Merge pull request #4403 from dotCooCoo/fix/kerning-tracking-catalog-terms

i18n: Character panel Kerning and Tracking terms agree in each catalog
This commit is contained in:
BFlat
2026-10-29 10:58:55 +07:00
committed by GitHub
8 changed files with 51 additions and 8 deletions
+1 -1
View File
@@ -2993,7 +2993,7 @@ font-technology Variable Променливи
Size/Leading Размер/Интервал
Size: Размер:
Ridges per segment: Изпъкналости на сегмент:
Size: {size} Tracking: {tracking} Размер: {size} Интервал: {tracking}
Size: {size} Tracking: {tracking} Размер: {size} Разредка: {tracking}
Skew Искавяване
Skin Tone Ramps Градиенти за цвят на кожата
Skip Blank Artboards Пропускане на празни работни области
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1 -1
View File
@@ -5033,7 +5033,7 @@ mark-style Japanese Japansk
This system has no screen color sampler Dette system har ingen skærmfarvesampler
Color blindness – Tritanopia-type Farveblindhed – tritanopitype
Panels Except Tools and Control Paneler undtagen værktøjer og kontrol
Reset Tracking and Kerning Nulstil spærring og kerning
Reset Tracking and Kerning Nulstil sporing og kerning
Reset Horizontal Scale Nulstil vandret skalering
@msg span must be "object" or "selection", got {v} span skal være "object" eller "selection", fik {v}
@msg span: "selection" places a `gradient`, not a swatch span: "selection" placerer en `gradient`, ikke en farveprøve
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1 -1
View File
@@ -3458,7 +3458,7 @@ theme Appearance Εμφάνιση
Size Tile to Art Προσαρμογή μεγέθους πλακιδίου στο σχέδιο
Size/Leading Μέγεθος/διάστιχο
Ridges per segment: Ράχες ανά τμήμα:
Size: {size} Tracking: {tracking} Μέγεθος: {size} Αραίωση: {tracking}
Size: {size} Tracking: {tracking} Μέγεθος: {size} Απόσταση χαρακτήρων: {tracking}
Skin Tone Ramps Χρωματικές κλίμακες τόνων δέρματος
Skip Blank Artboards Παράλειψη κενών πινάκων σχεδίασης
Sky Gradients Ντεγκραντέ ουρανού
Can't render this file because it contains an unexpected character in line 2070 and column 19.
+1 -1
View File
@@ -5033,7 +5033,7 @@ mark-style Japanese Jepang
This system has no screen color sampler Sistem ini tidak memiliki pengambil warna layar
Color blindness – Tritanopia-type Buta warna – tipe Tritanopia
Panels Except Tools and Control Semua panel kecuali Alat dan Kontrol
Reset Tracking and Kerning Atur ulang pelacakan dan kerning
Reset Tracking and Kerning Atur ulang tracking dan kerning
Reset Horizontal Scale Atur ulang skala horizontal
@msg span must be "object" or "selection", got {v} span harus "object" atau "selection", diterima {v}
@msg span: "selection" places a `gradient`, not a swatch span: "selection" menempatkan `gradient`, bukan swatch
Can't render this file because it contains an unexpected character in line 3857 and column 19.
+2 -2
View File
@@ -1524,7 +1524,7 @@ lighting Light Licht
Threshold Drempel
Trace Traceren
Trace the image with the Default preset De afbeelding traceren met de standaardvoorinstelling
Size: {size} Tracking: {tracking} Grootte: {size} Spatiëring: {tracking}
Size: {size} Tracking: {tracking} Grootte: {size} Tracking: {tracking}
<Opacity Mask> <Dekkingsmasker>
Create New Layer Nieuwe laag maken
Create New Sublayer Nieuwe sublaag maken
@@ -5045,7 +5045,7 @@ mark-style Japanese Japans
This system has no screen color sampler Dit systeem heeft geen schermkleurkiezer
Color blindness – Tritanopia-type Kleurenblindheid – type tritanopie
Panels Except Tools and Control Alle panelen behalve Gereedschap en Bediening
Reset Tracking and Kerning Spatiëring en kerning herstellen
Reset Tracking and Kerning Tracking en kerning herstellen
Reset Horizontal Scale Horizontale schaal herstellen
@msg span must be "object" or "selection", got {v} span moet "object" of "selection" zijn, maar is {v}
@msg span: "selection" places a `gradient`, not a swatch span: "selection" plaatst een `gradient`, geen staal
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1 -1
View File
@@ -1382,7 +1382,7 @@
Keep Plain Text Manter Texto Simples
Keep both sides the same width Manter os dois lados com a mesma largura
Keep this row's colors (exclude) Manter as cores desta linha (excluir)
Kerning (0 = Auto) Entrelinhamento (0 = Automático)
Kerning (0 = Auto) Kerning (0 = Automático)
Keyboard Increment Incremento do Teclado
Keyboard Shortcut Conflicts Conflitos de Atalhos de Teclado
Keyboard Shortcut Set Conjunto de Atalhos de Teclado
Can't render this file because it contains an unexpected character in line 6 and column 47.
+43
View File
@@ -486,6 +486,49 @@ fn no_translated_word_mixes_latin_cyrillic_and_greek_letters() {
assert!(bad.is_empty(), "words that mix scripts:\n{}", bad.join("\n"));
}
/// Each catalog gives the Character panel's Kerning, Leading and Tracking fields three different
/// names, every word of the Tracking and Kerning names appears in the Reset Tracking and Kerning
/// row, and every word of the Tracking name appears in the Info panel's type line outside its
/// placeholders (ignoring case). Each word is matched once, the longer name first, so a name
/// that contains the other name does not count for both.
/// A catalog without one of these rows is skipped for the checks that need it.
#[test]
fn character_panel_terms_agree_within_each_catalog() {
let mut bad = Vec::new();
for l in LANGUAGES.iter().filter(|l| !l.source.is_empty()) {
let (entries, _) = parse_entries(l.source);
let row = |src: &str| entries.iter().find(|(ctx, s, _)| ctx.is_empty() && s == src).map(|(_, _, tr)| tr.to_lowercase());
let kerning = row("Kerning (0 = Auto)").map(|tr| tr.split(" (").next().unwrap_or_default().trim().to_string());
let leading = row("Leading");
let tracking = row("Tracking");
for (a, b) in [(&kerning, &leading), (&kerning, &tracking), (&leading, &tracking)] {
if let (Some(a), Some(b)) = (a, b)
&& a == b
{
bad.push(format!("{}: two Character panel fields are both {a:?}", l.code));
}
}
let mut uses = |row_src: &str, terms: &[&Option<String>]| {
let Some(text) = row(row_src) else { return };
let mut bare = placeholders(&text).iter().fold(text.clone(), |t, p| t.replace(&format!("{{{p}}}"), " "));
let mut terms: Vec<&String> = terms.iter().filter_map(|t| t.as_ref()).collect();
terms.sort_by_key(|t| std::cmp::Reverse(t.chars().count()));
for term in terms {
for word in term.split_whitespace() {
if bare.contains(word) {
bare = bare.replacen(word, " ", 1);
} else {
bad.push(format!("{}: {row_src:?} → {text:?} lacks {word:?} from the field {term:?}", l.code));
}
}
}
};
uses("Reset Tracking and Kerning", &[&tracking, &kerning]);
uses("Size: {size} Tracking: {tracking}", &[&tracking]);
}
assert!(bad.is_empty(), "Character panel terms that disagree:\n{}", bad.join("\n"));
}
/// Every `tl!("…")` literal in this crate's sources (test modules aside).
pub fn tl_literals() -> std::collections::BTreeSet<String> {
let dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
+1 -1
View File
@@ -1106,7 +1106,7 @@ font-technology Variable Değişken
Decrease Font Size by Five Steps Yazı Tipi Boyutunu Beş Adım Azaltın
Increase Font Size Yazı Tipi Boyutunu Artır
Increase Font Size by Five Steps Yazı Tipi Boyutunu Beş Adım Artırın
Reset Tracking and Kerning İzlemeyi ve Karakter Aralığını Sıfırla
Reset Tracking and Kerning Takip ve Karakter Aralığını Sıfırla
Reset Horizontal Scale Yatay Ölçeği Sıfırla
Spacing Aralık
Step Type Adım Türü
Can't render this file because it contains an unexpected character in line 5 and column 25.