wgui: basic i18n support, refactoring: use LayoutState, translation framework (LLM-based generator)

This commit is contained in:
Aleksander
2025-08-02 23:31:23 +02:00
parent 4e46c45bcf
commit eaa81450b5
45 changed files with 916 additions and 223 deletions

View File

@@ -5,7 +5,8 @@
width="1000" height="500" min_width="1000" min_height="500"
gap="4" flex_direction="column"
overflow_y="scroll">
<label text="aaa" color="#FFFFFF" />
<label text="Raw text" color="#FFFFFF" />
<label translation="TESTBED.HELLO_WORLD" color="#FFFFFF" />
<button text="Red button" width="128" height="32" color="#FF0000" />
<button text="Aqua button" width="128" height="32" color="#00FFFF" />

View File

@@ -0,0 +1,9 @@
{
"BAR": {
"OPACITY": "Undurchsichtigkeit",
"ADDITIVE": "Additiv"
},
"TESTBED": {
"HELLO_WORLD": "Hallo, Welt! Dies ist ein übersetzter I18n-Text."
}
}

View File

@@ -0,0 +1,9 @@
{
"BAR": {
"OPACITY": "Opacity",
"ADDITIVE": "Additive"
},
"TESTBED": {
"HELLO_WORLD": "Hello, world! This is a translated I18n text."
}
}

View File

@@ -0,0 +1,9 @@
{
"BAR": {
"OPACITY": "Opacidad",
"ADDITIVE": "Aditivo"
},
"TESTBED": {
"HELLO_WORLD": "¡Hola, mundo! Este es un texto traducido de I18n."
}
}

View File

@@ -0,0 +1,9 @@
{
"BAR": {
"OPACITY": "不透明度",
"ADDITIVE": "加法"
},
"TESTBED": {
"HELLO_WORLD": "こんにちは、世界これは翻訳されたI18nテキストです。"
}
}

View File

@@ -0,0 +1,9 @@
{
"BAR": {
"OPACITY": "Przezroczystość",
"ADDITIVE": "Addytywny"
},
"TESTBED": {
"HELLO_WORLD": "Witaj, świecie! To przetłumaczony tekst I18n."
}
}

View File

@@ -1,6 +1,8 @@
use crate::{assets, testbed::Testbed};
use glam::Vec2;
use wgui::{event::EventListenerCollection, layout::Layout, parser::ParserState};
use wgui::{
event::EventListenerCollection, globals::WguiGlobals, layout::Layout, parser::ParserState,
};
pub struct TestbedAny {
pub layout: Layout,
@@ -15,8 +17,10 @@ impl TestbedAny {
listeners: &mut EventListenerCollection<(), ()>,
) -> anyhow::Result<Self> {
let path = format!("gui/{name}.xml");
let (layout, state) =
wgui::parser::new_layout_from_assets(Box::new(assets::Asset {}), listeners, &path)?;
let globals = WguiGlobals::new(Box::new(assets::Asset {}))?;
let (layout, state) = wgui::parser::new_layout_from_assets(globals, listeners, &path)?;
Ok(Self { layout, state })
}
}

View File

@@ -1,6 +1,8 @@
use crate::{assets, testbed::Testbed};
use glam::Vec2;
use wgui::{event::EventListenerCollection, layout::Layout, parser::ParserState};
use wgui::{
event::EventListenerCollection, globals::WguiGlobals, layout::Layout, parser::ParserState,
};
pub struct TestbedGeneric {
pub layout: Layout,
@@ -13,8 +15,9 @@ impl TestbedGeneric {
pub fn new(listeners: &mut EventListenerCollection<(), ()>) -> anyhow::Result<Self> {
const XML_PATH: &str = "gui/testbed.xml";
let (layout, state) =
wgui::parser::new_layout_from_assets(Box::new(assets::Asset {}), listeners, XML_PATH)?;
let globals = WguiGlobals::new(Box::new(assets::Asset {}))?;
let (layout, state) = wgui::parser::new_layout_from_assets(globals, listeners, XML_PATH)?;
Ok(Self { layout, state })
}