Add translation infrastructure and German translation

This commit is contained in:
Elias Projahn 2020-11-02 00:52:04 +01:00
parent 4b88eec93f
commit a83b650398
23 changed files with 834 additions and 51 deletions

View file

@ -2,6 +2,7 @@ use super::{InstrumentSelector, PersonSelector};
use crate::backend::*;
use crate::database::*;
use crate::widgets::*;
use gettextrs::gettext;
use glib::clone;
use gtk::prelude::*;
use gtk_macros::get_widget;
@ -95,7 +96,7 @@ impl PartEditor {
reset_composer_button.connect_clicked(clone!(@strong result => move |_| {
result.composer.replace(None);
result.composer_label.set_text("Select …");
result.composer_label.set_text(&gettext("Select …"));
}));
add_instrument_button.connect_clicked(clone!(@strong result => move |_| {

View file

@ -1,6 +1,7 @@
use super::*;
use crate::backend::Backend;
use crate::database::*;
use gettextrs::gettext;
use glib::clone;
use gtk::prelude::*;
use gtk_macros::get_widget;
@ -108,7 +109,7 @@ where
result.person.replace(Some(person.clone()));
result.person_label.set_text(&person.name_fl());
result.ensemble.replace(None);
result.ensemble_label.set_text("Select …");
result.ensemble_label.set_text(&gettext("Select …"));
result.save_button.set_sensitive(true);
})).show();
}));
@ -118,7 +119,7 @@ where
result.ensemble.replace(Some(ensemble.clone()));
result.ensemble_label.set_text(&ensemble.name);
result.person.replace(None);
result.person_label.set_text("Select …");
result.person_label.set_text(&gettext("Select …"));
result.save_button.set_sensitive(true);
})).show();
}));
@ -132,7 +133,7 @@ where
reset_role_button.connect_clicked(clone!(@strong result => move |_| {
result.role.replace(None);
result.role_label.set_text("Select …");
result.role_label.set_text(&gettext("Select …"));
}));
result.window.set_transient_for(Some(parent));

View file

@ -1,4 +1,5 @@
use crate::backend::Backend;
use gettextrs::gettext;
use glib::clone;
use gtk::prelude::*;
use gtk_macros::get_widget;
@ -23,21 +24,25 @@ impl Preferences {
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
}
select_music_library_path_button.connect_clicked(clone!(@strong window, @strong backend, @strong music_library_path_row => move |_| {
let dialog = gtk::FileChooserNative::new(Some("Select music library folder"), Some(&window), gtk::FileChooserAction::SelectFolder, None, None);
select_music_library_path_button.connect_clicked(
clone!(@strong window, @strong backend, @strong music_library_path_row => move |_| {
let dialog = gtk::FileChooserNative::new(
Some(&gettext("Select music library folder")),
Some(&window), gtk::FileChooserAction::SelectFolder,None, None);
if let gtk::ResponseType::Accept = dialog.run() {
if let Some(path) = dialog.get_filename() {
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
let context = glib::MainContext::default();
let backend = backend.clone();
context.spawn_local(async move {
backend.set_music_library_path(path).await.unwrap();
});
if let gtk::ResponseType::Accept = dialog.run() {
if let Some(path) = dialog.get_filename() {
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
let context = glib::MainContext::default();
let backend = backend.clone();
context.spawn_local(async move {
backend.set_music_library_path(path).await.unwrap();
});
}
}
}
}));
}),
);
Self { window }
}

View file

@ -2,6 +2,7 @@ use super::*;
use crate::backend::Backend;
use crate::database::*;
use crate::widgets::*;
use gettextrs::gettext;
use gio::prelude::*;
use glib::clone;
use gtk::prelude::*;
@ -25,8 +26,7 @@ impl RecordingSelector {
P: IsA<gtk::Window>,
F: Fn(RecordingDescription) -> () + 'static,
{
let builder =
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector.ui");
let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector.ui");
get_widget!(builder, gtk::Window, window);
get_widget!(builder, libhandy::Leaflet, leaflet);
@ -92,9 +92,8 @@ struct RecordingSelectorPersonScreen {
impl RecordingSelectorPersonScreen {
pub fn new(backend: Rc<Backend>, selector: Rc<RecordingSelector>, person: Person) -> Rc<Self> {
let builder = gtk::Builder::from_resource(
"/de/johrpan/musicus/ui/recording_selector_screen.ui",
);
let builder =
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector_screen.ui");
get_widget!(builder, gtk::Box, widget);
get_widget!(builder, libhandy::HeaderBar, header);
@ -110,7 +109,7 @@ impl RecordingSelectorPersonScreen {
label.upcast()
},
|_| true,
"No works found.",
&gettext("No works found."),
);
stack.add_named(&work_list.widget, "content");
@ -186,9 +185,8 @@ impl RecordingSelectorWorkScreen {
selector: Rc<RecordingSelector>,
work: WorkDescription,
) -> Rc<Self> {
let builder = gtk::Builder::from_resource(
"/de/johrpan/musicus/ui/recording_selector_screen.ui",
);
let builder =
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector_screen.ui");
get_widget!(builder, gtk::Box, widget);
get_widget!(builder, libhandy::HeaderBar, header);
@ -217,7 +215,7 @@ impl RecordingSelectorWorkScreen {
vbox.upcast()
},
|_| true,
"No recordings found.",
&gettext("No recordings found."),
);
stack.add_named(&recording_list.widget, "content");

View file

@ -2,6 +2,7 @@ use super::*;
use crate::backend::*;
use crate::database::*;
use crate::widgets::*;
use gettextrs::gettext;
use glib::clone;
use gtk::prelude::*;
use gtk_macros::get_widget;
@ -53,7 +54,7 @@ impl TracksEditor {
}
let title = if title_parts.is_empty() {
String::from("Unknown")
gettext("Unknown")
} else {
title_parts.join(", ")
};
@ -74,7 +75,7 @@ impl TracksEditor {
vbox.upcast()
}),
|_| true,
"Add some tracks.",
&gettext("Add some tracks."),
);
let autofill_parts = Rc::new(clone!(@strong recording, @strong tracks, @strong track_list => move || {
@ -141,7 +142,7 @@ impl TracksEditor {
add_track_button.connect_clicked(clone!(@strong window, @strong tracks, @strong track_list, @strong autofill_parts => move |_| {
let music_library_path = backend.get_music_library_path().unwrap();
let dialog = gtk::FileChooserNative::new(Some("Select audio files"), Some(&window), gtk::FileChooserAction::Open, None, None);
let dialog = gtk::FileChooserNative::new(Some(&gettext("Select audio files")), Some(&window), gtk::FileChooserAction::Open, None, None);
dialog.set_select_multiple(true);
dialog.set_current_folder(&music_library_path);