mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
i18n: the Swatches panel shows the default swatches' names in Japanese
The list showed [None], [Registration] and the default swatches' names in English. Names the app gives (the default swatches and colour groups) now show in the UI's language where it has a `swatch` row for them; documents keep the names as they are, and a name the user gave shows as written. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
committed by
bflatastic
co-authored by
Claude Opus 5.5
parent
4265c2f301
commit
75ee324e6c
@@ -3536,6 +3536,52 @@ theme Appearance 外観
|
||||
# names and values in backticks or code (`colorModel rgb`, `document.export`) stay as they are.
|
||||
# Japanese: no final 。 (these are status lines, and reasons that follow a colon), unless the English ends
|
||||
# with a period; a space between Japanese text and an adjacent Latin word, number or {placeholder}.
|
||||
# Swatches panel: the default swatches' names (shown in the UI language; documents keep them)
|
||||
swatch [None] [なし]
|
||||
swatch [Registration] [レジストレーション]
|
||||
swatch White ホワイト
|
||||
swatch Black ブラック
|
||||
swatch Red レッド
|
||||
swatch Orange Red オレンジレッド
|
||||
swatch Orange オレンジ
|
||||
swatch Amber アンバー
|
||||
swatch Yellow イエロー
|
||||
swatch Yellow Green イエローグリーン
|
||||
swatch Lime ライム
|
||||
swatch Green グリーン
|
||||
swatch Emerald エメラルド
|
||||
swatch Teal ティール
|
||||
swatch Aqua アクア
|
||||
swatch Cyan Green シアングリーン
|
||||
swatch Cyan シアン
|
||||
swatch Azure アジュール
|
||||
swatch Blue ブルー
|
||||
swatch Indigo インディゴ
|
||||
swatch Violet バイオレット
|
||||
swatch Purple パープル
|
||||
swatch Magenta マゼンタ
|
||||
swatch Rose ローズ
|
||||
swatch Pink ピンク
|
||||
swatch Brown ブラウン
|
||||
swatch Tan タン
|
||||
swatch Coffee コーヒー
|
||||
swatch Chocolate チョコレート
|
||||
swatch Sand サンド
|
||||
swatch Copper カッパー
|
||||
swatch Rust ラスト
|
||||
swatch Walnut ウォルナット
|
||||
swatch Espresso エスプレッソ
|
||||
swatch White, Black ホワイト、ブラック
|
||||
swatch Radial White, Black 円形 ホワイト、ブラック
|
||||
swatch Sunset サンセット
|
||||
swatch Ocean オーシャン
|
||||
swatch Grays グレー
|
||||
swatch Brights ビビッド
|
||||
swatch Bright Red ビビッドレッド
|
||||
swatch Bright Yellow ビビッドイエロー
|
||||
swatch Bright Green ビビッドグリーン
|
||||
swatch Bright Blue ビビッドブルー
|
||||
swatch Bright Violet ビビッドバイオレット
|
||||
@msg Reset {_1} {_1} をリセットしました
|
||||
@msg Saving 保存中
|
||||
@msg Saving {_1} {_1} を保存中
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -472,6 +472,12 @@ pub fn tr_ctx<'a>(lang: Lang, context: &str, s: &'a str) -> &'a str {
|
||||
lang.catalog().contextual(context, s).unwrap_or_else(|| tr(lang, s))
|
||||
}
|
||||
|
||||
/// A name the app gives something (a default swatch's), translated where the current language has
|
||||
/// a `context` row for it; any other name (one the user gave) comes back as it is.
|
||||
pub fn t_name<'a>(context: &str, name: &'a str) -> &'a str {
|
||||
current().catalog().contextual(context, name).unwrap_or(name)
|
||||
}
|
||||
|
||||
/// A string keyed by its command id, falling back to the translation of the English `label`.
|
||||
pub fn tr_id<'a>(lang: Lang, id: &str, label: &'a str) -> &'a str {
|
||||
lang.catalog().id(id).unwrap_or_else(|| tr(lang, label))
|
||||
|
||||
@@ -1469,3 +1469,20 @@ fn polish_reads_as_polish() {
|
||||
let nested = "command `object.group` is not available right now: nothing selected";
|
||||
assert_eq!(message(pl(), nested), "polecenie `object.group` jest teraz niedostępne: nic nie zaznaczono");
|
||||
}
|
||||
|
||||
/// Japanese names every default swatch and colour group the Swatches panel shows (the greys'
|
||||
/// `K=` values read the same in any language); a name the user gave a swatch has no row.
|
||||
#[test]
|
||||
fn japanese_names_the_default_swatches() {
|
||||
let ja = Lang::from_code("ja").unwrap().catalog();
|
||||
let (swatches, groups) = vectorcraft_color::default_swatches(vectorcraft_color::cms::Model::Rgb);
|
||||
let names = swatches
|
||||
.iter()
|
||||
.map(|s| s.name.clone())
|
||||
.chain(groups.iter().flat_map(|g| std::iter::once(g.name.clone()).chain(g.swatches.iter().map(|s| s.name.clone()))))
|
||||
.chain([vectorcraft_color::swatch::REGISTRATION.to_string()]);
|
||||
let missing: Vec<String> = names.filter(|n| !n.starts_with("K=") && ja.contextual("swatch", n).is_none()).collect();
|
||||
assert!(missing.is_empty(), "{missing:?}");
|
||||
assert_eq!(ja.contextual("swatch", "White"), Some("ホワイト"));
|
||||
assert_eq!(ja.contextual("swatch", "My Red"), None);
|
||||
}
|
||||
|
||||
@@ -429,12 +429,14 @@ fn tile_input(ui: &Ui, resp: Response, e: &Entry, items: &[Entry], sel: &[String
|
||||
egui::DragAndDrop::set_payload(ui.ctx(), drag_of(e, names));
|
||||
}
|
||||
tile_drop(ui, &resp, e, list, ev);
|
||||
// The default swatches' names show in the UI's language; the document keeps them as they are.
|
||||
let shown = crate::i18n::t_name("swatch", name);
|
||||
let resp = match e {
|
||||
Entry::Folder(n) => resp.on_hover_text(crate::i18n::fmt(tl!("Color Group: {name}"), &[("name", n)])),
|
||||
Entry::Folder(_) => resp.on_hover_text(crate::i18n::fmt(tl!("Color Group: {name}"), &[("name", shown)])),
|
||||
Entry::Swatch { paint, global, spot, .. } if list => resp.on_hover_ui(|ui| {
|
||||
ui.label(format!("{name} ({})", describe(paint, *global, *spot)));
|
||||
ui.label(format!("{shown} ({})", describe(paint, *global, *spot)));
|
||||
}),
|
||||
_ => resp.on_hover_text(name),
|
||||
_ => resp.on_hover_text(shown),
|
||||
};
|
||||
if resp.clicked() {
|
||||
ev.clicked = Some((e.clone(), ui.input(|i| i.modifiers)));
|
||||
@@ -682,7 +684,7 @@ fn body(app: &mut VectorcraftApp, ui: &mut Ui, salt: &'static str) {
|
||||
}
|
||||
Entry::Folder(_) => draw_folder(ui, chip),
|
||||
}
|
||||
list_row_name(ui, r, chip, name);
|
||||
list_row_name(ui, r, chip, crate::i18n::t_name("swatch", name));
|
||||
tile_input(ui, resp, e, &items, sel, true, &mut ev);
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user