From ad4eec2924a317038ecc095d1b23804afecaa79b Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 4 Nov 2025 11:04:44 +0100 Subject: [PATCH] Native live preview: Forward the translation domain to fix translations CC #9942 --- api/cpp/include/slint_live_preview.h | 4 ++-- internal/compiler/generator/cpp_live_preview.rs | 7 ++++++- internal/compiler/generator/rust_live_preview.rs | 2 ++ internal/interpreter/live_preview.rs | 5 +++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/api/cpp/include/slint_live_preview.h b/api/cpp/include/slint_live_preview.h index 64ac6acd5c..d3e914067b 100644 --- a/api/cpp/include/slint_live_preview.h +++ b/api/cpp/include/slint_live_preview.h @@ -134,12 +134,12 @@ public: LiveReloadingComponent(std::string_view file_name, std::string_view component_name, const slint::SharedVector &include_paths, const slint::SharedVector &libraries, - std::string_view style) + std::string_view style, std::string_view translation_domain) { assert_main_thread(); inner = cbindgen_private::slint_live_preview_new( string_to_slice(file_name), string_to_slice(component_name), &include_paths, - &libraries, string_to_slice(style)); + &libraries, string_to_slice(style), string_to_slice(translation_domain)); } LiveReloadingComponent(const LiveReloadingComponent &other) : inner(other.inner) diff --git a/internal/compiler/generator/cpp_live_preview.rs b/internal/compiler/generator/cpp_live_preview.rs index 39ce3f8744..61d213317b 100644 --- a/internal/compiler/generator/cpp_live_preview.rs +++ b/internal/compiler/generator/cpp_live_preview.rs @@ -138,7 +138,12 @@ fn generate_public_component( let create_code = vec![ format!("slint::SharedVector include_paths{{ {} }};", compiler_config.include_paths.iter().map(|p| format!("\"{}\"", escape_string(&p.to_string_lossy()))).join(", ")), format!("slint::SharedVector library_paths{{ {} }};", compiler_config.library_paths.iter().map(|(l, p)| format!("\"{l}={}\"", p.to_string_lossy())).join(", ")), - format!("auto live_preview = slint::private_api::live_preview::LiveReloadingComponent({main_file:?}, {:?}, include_paths, library_paths, \"{}\");", component.name, compiler_config.style.as_ref().unwrap_or(&String::new())), + format!( + "auto live_preview = slint::private_api::live_preview::LiveReloadingComponent({main_file:?}, {:?}, include_paths, library_paths, {:?}, {:?});", + component.name, + compiler_config.style.as_ref().unwrap_or(&String::new()), + compiler_config.translation_domain.as_ref().unwrap_or(&String::new()) + ), format!("auto self_rc = vtable::VRc::make(std::move(live_preview));"), format!("return slint::ComponentHandle<{component_id}>(self_rc);"), ]; diff --git a/internal/compiler/generator/rust_live_preview.rs b/internal/compiler/generator/rust_live_preview.rs index 41f731ea48..23c4446cc2 100644 --- a/internal/compiler/generator/rust_live_preview.rs +++ b/internal/compiler/generator/rust_live_preview.rs @@ -171,6 +171,7 @@ fn generate_public_component( let p = p.to_string_lossy(); quote!((#n.to_string(), #p.into())) }); + let translation_domain = compiler_config.translation_domain.iter(); let style = compiler_config.style.iter(); quote!( @@ -182,6 +183,7 @@ fn generate_public_component( compiler.set_include_paths([#(#include_paths.into()),*].into_iter().collect()); compiler.set_library_paths([#(#library_paths.into()),*].into_iter().collect()); #(compiler.set_style(#style.to_string());)* + #(compiler.set_translation_domain(#translation_domain.to_string());)* let instance = sp::live_preview::LiveReloadingComponent::new(compiler, #main_file.into(), #component_name.into())?; let window_adapter = sp::WindowInner::from_pub(slint::ComponentHandle::window(instance.borrow().instance())).window_adapter(); sp::Ok(Self(instance, window_adapter)) diff --git a/internal/interpreter/live_preview.rs b/internal/interpreter/live_preview.rs index 5d41b88cf6..4c5493e926 100644 --- a/internal/interpreter/live_preview.rs +++ b/internal/interpreter/live_preview.rs @@ -335,6 +335,7 @@ mod ffi { include_paths: &SharedVector, library_paths: &SharedVector, style: Slice, + translation_domain: Slice, ) -> *const LiveReloadingComponentInner { let mut compiler = Compiler::default(); compiler.set_include_paths( @@ -350,6 +351,10 @@ mod ffi { if !style.is_empty() { compiler.set_style(std::str::from_utf8(&style).unwrap().into()); } + if !translation_domain.is_empty() { + compiler + .set_translation_domain(std::str::from_utf8(&translation_domain).unwrap().into()); + } Rc::into_raw( LiveReloadingComponent::new( compiler,