Commit 8afee947 authored by Bilal Elmoussaoui's avatar Bilal Elmoussaoui

i18n: move more string to UI files

This only leaves us with only one translatable string defined on a rust file, due to the low gettext/rust support...
parent 1bff7f23
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
<property name="content"> <property name="content">
<object class="PaginatorWidget" id="paginator"> <object class="PaginatorWidget" id="paginator">
<child> <child>
<object class="ImagePageWidget" id="welcome_page">
<property name="resource-uri">/org/gnome/Tour/welcome.svg</property>
<property name="head" translatable="yes">Start the Tour</property>
</object>
</child>
<child>
<object class="ImagePageWidget"> <object class="ImagePageWidget">
<property name="resource-uri">/org/gnome/Tour/overview.svg</property> <property name="resource-uri">/org/gnome/Tour/overview.svg</property>
<property name="head" translatable="yes">Get an Overview</property> <property name="head" translatable="yes">Get an Overview</property>
......
...@@ -2,6 +2,5 @@ data/org.gnome.Tour.desktop.in.in ...@@ -2,6 +2,5 @@ data/org.gnome.Tour.desktop.in.in
data/org.gnome.Tour.metainfo.xml.in.in data/org.gnome.Tour.metainfo.xml.in.in
data/resources/ui/paginator.ui data/resources/ui/paginator.ui
data/resources/ui/window.ui data/resources/ui/window.ui
src/widgets/image_page.rs src/widgets/window.rs
src/widgets/paginator.rs
src/main.rs src/main.rs
...@@ -7,12 +7,13 @@ mod imp { ...@@ -7,12 +7,13 @@ mod imp {
use glib::once_cell::sync::Lazy; use glib::once_cell::sync::Lazy;
use glib::{ParamFlags, ParamSpec, ParamSpecString, Value}; use glib::{ParamFlags, ParamSpec, ParamSpecString, Value};
use gtk::glib::once_cell::sync::OnceCell; use gtk::glib::once_cell::sync::OnceCell;
use std::cell::RefCell;
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct ImagePageWidget { pub struct ImagePageWidget {
pub(super) resource_uri: OnceCell<String>, pub(super) resource_uri: OnceCell<String>,
pub(super) head: OnceCell<String>, pub(super) head: OnceCell<String>,
pub(super) body: OnceCell<String>, pub(super) body: RefCell<String>,
pub(super) picture: gtk::Picture, pub(super) picture: gtk::Picture,
} }
...@@ -105,7 +106,7 @@ mod imp { ...@@ -105,7 +106,7 @@ mod imp {
"Body", "Body",
"The body of the page", "The body of the page",
None, None,
ParamFlags::READWRITE | ParamFlags::CONSTRUCT_ONLY, ParamFlags::READWRITE | ParamFlags::CONSTRUCT,
), ),
] ]
}); });
...@@ -124,8 +125,9 @@ mod imp { ...@@ -124,8 +125,9 @@ mod imp {
self.head.set(head).unwrap(); self.head.set(head).unwrap();
} }
"body" => { "body" => {
let body = value.get().unwrap(); if let Some(body) = value.get::<Option<String>>().unwrap() {
self.body.set(body).unwrap(); self.body.replace(body);
}
} }
_ => unimplemented!(), _ => unimplemented!(),
} }
...@@ -135,7 +137,7 @@ mod imp { ...@@ -135,7 +137,7 @@ mod imp {
match pspec.name() { match pspec.name() {
"resource-uri" => self.resource_uri.get().to_value(), "resource-uri" => self.resource_uri.get().to_value(),
"head" => self.head.get().to_value(), "head" => self.head.get().to_value(),
"body" => self.body.get().to_value(), "body" => self.body.borrow().to_value(),
_ => unimplemented!(), _ => unimplemented!(),
} }
} }
...@@ -158,4 +160,8 @@ impl ImagePageWidget { ...@@ -158,4 +160,8 @@ impl ImagePageWidget {
]) ])
.unwrap() .unwrap()
} }
pub fn set_body(&self, body: &str) {
self.set_property("body", &body);
}
} }
use crate::{utils::i18n_f, widgets::ImagePageWidget};
use gettextrs::gettext;
use gtk::prelude::*; use gtk::prelude::*;
use gtk::{ use gtk::{
gdk, gdk,
...@@ -9,8 +7,7 @@ use gtk::{ ...@@ -9,8 +7,7 @@ use gtk::{
mod imp { mod imp {
use super::*; use super::*;
use std::cell::Cell; use std::cell::{Cell, RefCell};
use std::cell::RefCell;
#[derive(Debug, gtk::CompositeTemplate)] #[derive(Debug, gtk::CompositeTemplate)]
#[template(resource = "/org/gnome/Tour/ui/paginator.ui")] #[template(resource = "/org/gnome/Tour/ui/paginator.ui")]
...@@ -35,7 +32,7 @@ mod imp { ...@@ -35,7 +32,7 @@ mod imp {
start_btn: TemplateChild::default(), start_btn: TemplateChild::default(),
next_btn: TemplateChild::default(), next_btn: TemplateChild::default(),
previous_btn: TemplateChild::default(), previous_btn: TemplateChild::default(),
pages: RefCell::new(Vec::new()), pages: RefCell::default(),
current_page: Cell::new(0), current_page: Cell::new(0),
going_backward: Cell::new(false), going_backward: Cell::new(false),
} }
...@@ -72,21 +69,6 @@ mod imp { ...@@ -72,21 +69,6 @@ mod imp {
obj.update_position(); obj.update_position();
})); }));
let name = glib::os_info("NAME").unwrap_or_else(|| "GNOME".into());
let version = glib::os_info("VERSION").unwrap_or_else(|| "".into());
let body = i18n_f(
// Translators: The following string is formated as "Learn about new and essential features in GNOME 3.36" for example
"Learn about the key features in {name} {version}.",
&[("name", &name), ("version", &version)],
);
let welcome_page = ImagePageWidget::new(
"/org/gnome/Tour/welcome.svg",
gettext("Start the Tour"),
body,
);
obj.add_page(Some(-1), welcome_page);
let controller = gtk::EventControllerKey::new(); let controller = gtk::EventControllerKey::new();
controller.connect_key_pressed(clone!(@weak obj => @default-return gtk::Inhibit(true), move |_controller, keyval, _keycode, _state| { controller.connect_key_pressed(clone!(@weak obj => @default-return gtk::Inhibit(true), move |_controller, keyval, _keycode, _state| {
if keyval == gdk::Key::Right { if keyval == gdk::Key::Right {
...@@ -115,7 +97,7 @@ mod imp { ...@@ -115,7 +97,7 @@ mod imp {
if !self.carousel.is_bound() { if !self.carousel.is_bound() {
self.parent_add_child(buildable, builder, child, type_); self.parent_add_child(buildable, builder, child, type_);
} else { } else {
buildable.add_page(None, child.clone().downcast::<gtk::Widget>().unwrap()); buildable.add_page(child.clone().downcast::<gtk::Widget>().unwrap());
} }
} }
} }
...@@ -151,10 +133,10 @@ impl PaginatorWidget { ...@@ -151,10 +133,10 @@ impl PaginatorWidget {
Some(()) Some(())
} }
pub fn add_page(&self, at: Option<i32>, page: impl IsA<gtk::Widget>) { pub fn add_page(&self, page: impl IsA<gtk::Widget>) {
let imp = self.imp(); let imp = self.imp();
let page_nr = imp.pages.borrow().len(); let page_nr = imp.pages.borrow().len();
imp.carousel.insert(&page, at.unwrap_or(page_nr as i32)); imp.carousel.insert(&page, page_nr as i32);
imp.pages.borrow_mut().push(page.upcast()); imp.pages.borrow_mut().push(page.upcast());
self.update_position(); self.update_position();
......
use crate::utils::i18n_f;
use adw::prelude::*; use adw::prelude::*;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{gio, glib}; use gtk::{gio, glib};
...@@ -16,6 +17,8 @@ mod imp { ...@@ -16,6 +17,8 @@ mod imp {
pub struct Window { pub struct Window {
#[template_child] #[template_child]
pub(super) paginator: TemplateChild<PaginatorWidget>, pub(super) paginator: TemplateChild<PaginatorWidget>,
#[template_child]
pub(super) welcome_page: TemplateChild<ImagePageWidget>,
} }
#[glib::object_subclass] #[glib::object_subclass]
...@@ -42,6 +45,15 @@ mod imp { ...@@ -42,6 +45,15 @@ mod imp {
if config::PROFILE == "Devel" { if config::PROFILE == "Devel" {
widget.add_css_class("devel"); widget.add_css_class("devel");
} }
let name = glib::os_info("NAME").unwrap_or_else(|| "GNOME".into());
let version = glib::os_info("VERSION").unwrap_or_else(|| "".into());
let body = i18n_f(
// Translators: The following string is formated as "Learn about new and essential features in GNOME 3.36" for example
"Learn about the key features in {name} {version}.",
&[("name", &name), ("version", &version)],
);
self.welcome_page.set_body(&body);
self.parent_constructed(widget); self.parent_constructed(widget);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment