From 93e48f8be71b2fcc12b971e66917d07e973db9db Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 9 Oct 2026 20:44:04 -0400 Subject: [PATCH] LR-BEHAV-LOCALIZE: Ukrainian coverage gaps are reported, not failed; Compare keeps Lightroom's "Select" label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A label added by another PR (Decrease Rating, Display Profile, …) no longer fails the Ukrainian test; it shows in English until translated, as for the other languages. Co-Authored-By: Claude Opus 5.5 --- crates/ui-egui/src/i18n.rs | 15 +++++++++++---- crates/ui-egui/src/panels/compare.rs | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 886a663e8..941b12def 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -629,11 +629,16 @@ mod tests { } } + /// Ukrainian's coverage of every catalog message and display label. Gaps are reported, not failed + /// (like `catalogs_agree_on_placeholders_and_report_gaps`): a feature PR that adds a label doesn't + /// have to ship its Ukrainian text, which shows in English until the translation catches up. #[test] - fn ukrainian_covers_catalogs_commands_controls_and_rules() { + fn ukrainian_coverage_of_catalogs_commands_controls_and_rules_is_reported() { let catalog = Locale::Uk.catalog(); - for key in Locale::ALL.iter().flat_map(|language| language.catalog().keys()) { - assert!(catalog.contains_key(key), "Ukrainian lacks catalog key {key:?}"); + let keys: std::collections::BTreeSet<&String> = Locale::ALL.iter().flat_map(|language| language.catalog().keys()).collect(); + let lacking: Vec<_> = keys.into_iter().filter(|key| !catalog.contains_key(key.as_str())).collect(); + if !lacking.is_empty() { + eprintln!("uk lacks {} catalog message(s) (shown in English): {lacking:?}", lacking.len()); } let mut labels: Vec<&str> = lightcraft_engine::command_specs().iter().map(|spec| spec.label).collect(); labels.extend(crate::menus::ui_commands().map(|command| command.1).filter(|label| !Locale::ALL.iter().any(|locale| locale.name() == *label))); @@ -646,7 +651,9 @@ mod tests { labels.extend(lightcraft_engine::rename::TOKENS.iter().map(|token| token.meaning)); labels.extend(lightcraft_engine::rename::TEMPLATE_NOTES); let missing: Vec<_> = labels.into_iter().filter(|label| !catalog.contains_key(*label)).collect(); - assert!(missing.is_empty(), "Ukrainian lacks display labels: {missing:?}"); + if !missing.is_empty() { + eprintln!("uk lacks {} display label(s) (shown in English): {missing:?}", missing.len()); + } } #[test] diff --git a/crates/ui-egui/src/panels/compare.rs b/crates/ui-egui/src/panels/compare.rs index caf5f98ef..77ee4242f 100644 --- a/crates/ui-egui/src/panels/compare.rs +++ b/crates/ui-egui/src/panels/compare.rs @@ -250,7 +250,7 @@ pub fn show_compare(app: &mut LightcraftApp, ui: &mut egui::Ui) { let area = canvas.shrink(18.0); let half = (area.width() - 16.0) / 2.0; let panes = [ - (sel, Rect::from_min_size(area.min, vec2(half, area.height())), "Selected", 0u8), + (sel, Rect::from_min_size(area.min, vec2(half, area.height())), "Select", 0u8), (cand, Rect::from_min_size(pos2(area.right() - half, area.top()), vec2(half, area.height())), "Candidate", 1u8), ]; let zoom = app.ui.zoom;