mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 11:47:25 +01:00
Add translation infrastructure and German translation
This commit is contained in:
parent
4b88eec93f
commit
a83b650398
23 changed files with 834 additions and 51 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,6 +2,7 @@
|
||||||
/build
|
/build
|
||||||
/builddir
|
/builddir
|
||||||
/flatpak
|
/flatpak
|
||||||
|
/src/config.rs
|
||||||
/src/resources.rs
|
/src/resources.rs
|
||||||
/target
|
/target
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ diesel = { version = "1.4.5", features = ["sqlite"] }
|
||||||
diesel_migrations = "1.4.0"
|
diesel_migrations = "1.4.0"
|
||||||
futures = "0.3.6"
|
futures = "0.3.6"
|
||||||
futures-channel = "0.3.5"
|
futures-channel = "0.3.5"
|
||||||
|
gettext-rs = "0.5.0"
|
||||||
gio = "0.9.1"
|
gio = "0.9.1"
|
||||||
glib = "0.10.2"
|
glib = "0.10.2"
|
||||||
gtk = { version = "0.9.2", features = ["v3_24"] }
|
gtk = { version = "0.9.2", features = ["v3_24"] }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
de
|
||||||
61
po/POTFILES.in
Normal file
61
po/POTFILES.in
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
res/ui/ensemble_editor.ui
|
||||||
|
res/ui/ensemble_screen.ui
|
||||||
|
res/ui/ensemble_selector.ui
|
||||||
|
res/ui/instrument_editor.ui
|
||||||
|
res/ui/instrument_selector.ui
|
||||||
|
res/ui/part_editor.ui
|
||||||
|
res/ui/performance_editor.ui
|
||||||
|
res/ui/person_editor.ui
|
||||||
|
res/ui/person_list.ui
|
||||||
|
res/ui/person_screen.ui
|
||||||
|
res/ui/person_selector.ui
|
||||||
|
res/ui/poe_list.ui
|
||||||
|
res/ui/preferences.ui
|
||||||
|
res/ui/recording_editor.ui
|
||||||
|
res/ui/recording_screen.ui
|
||||||
|
res/ui/recording_selector_screen.ui
|
||||||
|
res/ui/recording_selector.ui
|
||||||
|
res/ui/section_editor.ui
|
||||||
|
res/ui/track_editor.ui
|
||||||
|
res/ui/tracks_editor.ui
|
||||||
|
res/ui/window.ui
|
||||||
|
res/ui/work_editor.ui
|
||||||
|
res/ui/work_screen.ui
|
||||||
|
res/ui/work_selector.ui
|
||||||
|
|
||||||
|
src/database/database.rs
|
||||||
|
src/database/models.rs
|
||||||
|
src/database/mod.rs
|
||||||
|
src/database/schema.rs
|
||||||
|
src/database/tables.rs
|
||||||
|
src/dialogs/ensemble_editor.rs
|
||||||
|
src/dialogs/ensemble_selector.rs
|
||||||
|
src/dialogs/instrument_editor.rs
|
||||||
|
src/dialogs/instrument_selector.rs
|
||||||
|
src/dialogs/mod.rs
|
||||||
|
src/dialogs/part_editor.rs
|
||||||
|
src/dialogs/performance_editor.rs
|
||||||
|
src/dialogs/person_editor.rs
|
||||||
|
src/dialogs/person_selector.rs
|
||||||
|
src/dialogs/preferences.rs
|
||||||
|
src/dialogs/recording_editor.rs
|
||||||
|
src/dialogs/recording_selector.rs
|
||||||
|
src/dialogs/section_editor.rs
|
||||||
|
src/dialogs/track_editor.rs
|
||||||
|
src/dialogs/tracks_editor.rs
|
||||||
|
src/dialogs/work_editor.rs
|
||||||
|
src/dialogs/work_selector.rs
|
||||||
|
src/screens/ensemble_screen.rs
|
||||||
|
src/screens/mod.rs
|
||||||
|
src/screens/person_screen.rs
|
||||||
|
src/screens/recording_screen.rs
|
||||||
|
src/screens/work_screen.rs
|
||||||
|
src/widgets/list.rs
|
||||||
|
src/widgets/mod.rs
|
||||||
|
src/widgets/navigator.rs
|
||||||
|
src/widgets/person_list.rs
|
||||||
|
src/widgets/poe_list.rs
|
||||||
|
src/widgets/selector_row.rs
|
||||||
|
src/backend.rs
|
||||||
|
src/main.rs
|
||||||
|
src/window.rs
|
||||||
342
po/de.po
Normal file
342
po/de.po
Normal file
|
|
@ -0,0 +1,342 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-11-02 00:33+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-11-02 00:44+0100\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.4.1\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:22 res/ui/instrument_editor.ui:22
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Name"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:46 res/ui/performance_editor.ui:155
|
||||||
|
#: res/ui/performance_editor.ui:186
|
||||||
|
msgid "Ensemble"
|
||||||
|
msgstr "Ensemble"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:49 res/ui/instrument_editor.ui:49
|
||||||
|
#: res/ui/part_editor.ui:241 res/ui/performance_editor.ui:219
|
||||||
|
#: res/ui/person_editor.ui:72 res/ui/recording_editor.ui:225
|
||||||
|
#: res/ui/section_editor.ui:49 res/ui/track_editor.ui:45
|
||||||
|
#: res/ui/tracks_editor.ui:268 res/ui/work_editor.ui:389
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:57 res/ui/instrument_editor.ui:57
|
||||||
|
#: res/ui/part_editor.ui:249 res/ui/performance_editor.ui:227
|
||||||
|
#: res/ui/person_editor.ui:80 res/ui/recording_editor.ui:233
|
||||||
|
#: res/ui/section_editor.ui:57 res/ui/track_editor.ui:53
|
||||||
|
#: res/ui/tracks_editor.ui:253 res/ui/work_editor.ui:397
|
||||||
|
msgid "Save"
|
||||||
|
msgstr "Speichern"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:90 res/ui/work_screen.ui:90
|
||||||
|
msgid "Search recordings …"
|
||||||
|
msgstr "Aufnahmen durchsuchen …"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:143 res/ui/person_screen.ui:188
|
||||||
|
#: res/ui/work_screen.ui:143
|
||||||
|
msgid "Recordings"
|
||||||
|
msgstr "Aufnahmen"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:191 res/ui/work_screen.ui:191
|
||||||
|
#: src/dialogs/recording_selector.rs:218 src/screens/ensemble_screen.rs:76
|
||||||
|
#: src/screens/person_screen.rs:94 src/screens/work_screen.rs:77
|
||||||
|
msgid "No recordings found."
|
||||||
|
msgstr "Keine Aufnahmen gefunden."
|
||||||
|
|
||||||
|
#: res/ui/ensemble_selector.ui:52
|
||||||
|
msgid "No ensembles found."
|
||||||
|
msgstr "Keine Ensembles gefunden."
|
||||||
|
|
||||||
|
#: res/ui/ensemble_selector.ui:72
|
||||||
|
msgid "Select ensemble"
|
||||||
|
msgstr "Ensemble auswählen"
|
||||||
|
|
||||||
|
#: res/ui/instrument_editor.ui:46
|
||||||
|
msgid "Instrument"
|
||||||
|
msgstr "Instrument"
|
||||||
|
|
||||||
|
#: res/ui/instrument_selector.ui:52
|
||||||
|
msgid "No instruments found."
|
||||||
|
msgstr "Keine Instrumente gefunden."
|
||||||
|
|
||||||
|
#: res/ui/instrument_selector.ui:72
|
||||||
|
msgid "Select instrument"
|
||||||
|
msgstr "Instrument auswählen"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:29 res/ui/work_editor.ui:48
|
||||||
|
msgid "Composer"
|
||||||
|
msgstr "Komponist"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:52 res/ui/section_editor.ui:22
|
||||||
|
#: res/ui/work_editor.ui:70
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Titel"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:75 res/ui/performance_editor.ui:45
|
||||||
|
#: res/ui/performance_editor.ui:129 res/ui/performance_editor.ui:173
|
||||||
|
#: res/ui/recording_editor.ui:47 res/ui/tracks_editor.ui:49
|
||||||
|
#: res/ui/work_editor.ui:34 src/dialogs/part_editor.rs:99
|
||||||
|
#: src/dialogs/performance_editor.rs:112 src/dialogs/performance_editor.rs:122
|
||||||
|
#: src/dialogs/performance_editor.rs:136
|
||||||
|
msgid "Select …"
|
||||||
|
msgstr "Auswählen …"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:119 res/ui/recording_editor.ui:84
|
||||||
|
#: res/ui/work_editor.ui:83
|
||||||
|
msgid "Overview"
|
||||||
|
msgstr "Überblick"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:150 res/ui/work_editor.ui:114
|
||||||
|
msgid "No instruments added."
|
||||||
|
msgstr "Keine Instrumente hinzugefügt"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:225 res/ui/work_editor.ui:189
|
||||||
|
msgid "Instruments"
|
||||||
|
msgstr "Instrumente"
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:238
|
||||||
|
msgid "Work part"
|
||||||
|
msgstr "Werkabschnitt"
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:22
|
||||||
|
msgid "Role"
|
||||||
|
msgstr "Rolle"
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:87
|
||||||
|
msgid "Type"
|
||||||
|
msgstr "Typ"
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:110 res/ui/performance_editor.ui:142
|
||||||
|
#: res/ui/person_editor.ui:69
|
||||||
|
msgid "Person"
|
||||||
|
msgstr "Person"
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:216
|
||||||
|
msgid "Performance"
|
||||||
|
msgstr "Auftritt"
|
||||||
|
|
||||||
|
#: res/ui/person_editor.ui:22
|
||||||
|
msgid "First name"
|
||||||
|
msgstr "Vorname"
|
||||||
|
|
||||||
|
#: res/ui/person_editor.ui:45
|
||||||
|
msgid "Last name"
|
||||||
|
msgstr "Nachname"
|
||||||
|
|
||||||
|
#: res/ui/person_list.ui:28 res/ui/work_selector.ui:69
|
||||||
|
msgid "Search persons …"
|
||||||
|
msgstr "Personen durchsuchen …"
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:90
|
||||||
|
msgid "Search works and recordings …"
|
||||||
|
msgstr "Werke und Aufnahmen durchsuchen …"
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:143
|
||||||
|
msgid "Works"
|
||||||
|
msgstr "Werke"
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:236
|
||||||
|
msgid "No works or recordings found."
|
||||||
|
msgstr "Keine Werke oder Aufnahmen gefunden."
|
||||||
|
|
||||||
|
#: res/ui/person_selector.ui:19
|
||||||
|
msgid "Select person"
|
||||||
|
msgstr "Person auswählen"
|
||||||
|
|
||||||
|
#: res/ui/poe_list.ui:28
|
||||||
|
msgid "Search persons and ensembles …"
|
||||||
|
msgstr "Personen und Ensembles durchsuchen …"
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:14
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Allgemein"
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:19
|
||||||
|
msgid "Music library"
|
||||||
|
msgstr "Musikbibliothek"
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:25
|
||||||
|
msgid "Music library folder"
|
||||||
|
msgstr "Ordner der Musikbibliothek"
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:27
|
||||||
|
msgid "None selected"
|
||||||
|
msgstr "Keiner ausgewählt"
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:30
|
||||||
|
msgid "Select"
|
||||||
|
msgstr "Auswählen"
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:29
|
||||||
|
msgid "Comment"
|
||||||
|
msgstr "Kommentar"
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:71 res/ui/tracks_editor.ui:65
|
||||||
|
#: res/ui/work_editor.ui:386
|
||||||
|
msgid "Work"
|
||||||
|
msgstr "Werk"
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:115
|
||||||
|
msgid "No performers added."
|
||||||
|
msgstr "Keine Interpreten hinzugefügt."
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:209 res/ui/tracks_editor.ui:83
|
||||||
|
msgid "Performers"
|
||||||
|
msgstr "Interpreten"
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:222 res/ui/tracks_editor.ui:24
|
||||||
|
msgid "Recording"
|
||||||
|
msgstr "Aufnahme"
|
||||||
|
|
||||||
|
#: res/ui/recording_screen.ui:96 res/ui/tracks_editor.ui:250
|
||||||
|
msgid "Tracks"
|
||||||
|
msgstr "Tracks"
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:15
|
||||||
|
msgid "Select a recording"
|
||||||
|
msgstr "Aufnahme auswählen"
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:28 res/ui/work_selector.ui:180
|
||||||
|
msgid "Select a composer on the left."
|
||||||
|
msgstr "Wählen Sie einen Komponisten aus."
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:72 res/ui/recording_selector.ui:187
|
||||||
|
#: src/dialogs/recording_selector.rs:112 src/screens/person_screen.rs:68
|
||||||
|
msgid "No works found."
|
||||||
|
msgstr "Keine Werke gefunden."
|
||||||
|
|
||||||
|
#: res/ui/section_editor.ui:46
|
||||||
|
msgid "Work section"
|
||||||
|
msgstr "Werkteil"
|
||||||
|
|
||||||
|
#: res/ui/track_editor.ui:29
|
||||||
|
msgid "Select a recording of a work with multiple parts."
|
||||||
|
msgstr "Wählen Sie eine Aufnahme eines mehrteiligen Werks aus."
|
||||||
|
|
||||||
|
#: res/ui/track_editor.ui:42
|
||||||
|
msgid "Track"
|
||||||
|
msgstr "Track"
|
||||||
|
|
||||||
|
#: res/ui/window.ui:15 res/ui/window.ui:104 res/ui/window.ui:206
|
||||||
|
msgid "Musicus"
|
||||||
|
msgstr "Musicus"
|
||||||
|
|
||||||
|
#: res/ui/window.ui:51 res/ui/window.ui:141
|
||||||
|
msgid "Welcome to Musicus!"
|
||||||
|
msgstr "Willkommen bei Musicus!"
|
||||||
|
|
||||||
|
#: res/ui/window.ui:67
|
||||||
|
msgid ""
|
||||||
|
"Get startet by selecting something from the sidebar or adding new things to "
|
||||||
|
"your library using the button in the top left corner."
|
||||||
|
msgstr ""
|
||||||
|
"Legen Sie los, indem Sie etwas in der Seitenleiste auswählen oder fügen Sie "
|
||||||
|
"mit dem Knopf oben links neue Aufnahmen zu Ihrer Musikbibliothek hinzu."
|
||||||
|
|
||||||
|
#: res/ui/window.ui:157
|
||||||
|
msgid ""
|
||||||
|
"Get startet by selecting the folder containing your music files! Musicus "
|
||||||
|
"will create a new database there or open one that already exists."
|
||||||
|
msgstr ""
|
||||||
|
"Wählen Sie als Erstes den Ordner aus, worin sich Ihre Musik befindet. "
|
||||||
|
"Musicus wird dort eine neue Datenbank anlegen oder eine bereits "
|
||||||
|
"existierende öffnen."
|
||||||
|
|
||||||
|
#: res/ui/window.ui:170
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr "Ordner auswählen"
|
||||||
|
|
||||||
|
#: res/ui/window.ui:320
|
||||||
|
msgid "Preferences"
|
||||||
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
|
#: res/ui/work_editor.ui:221
|
||||||
|
msgid "No work parts added."
|
||||||
|
msgstr "Keine Werkabschnitte hinzugefügt."
|
||||||
|
|
||||||
|
#: res/ui/work_editor.ui:373
|
||||||
|
msgid "Structure"
|
||||||
|
msgstr "Struktur"
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:113 src/widgets/person_list.rs:37
|
||||||
|
msgid "No persons found."
|
||||||
|
msgstr "Keine Personen gefunden."
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:167
|
||||||
|
msgid "Select work"
|
||||||
|
msgstr "Werk auswählen"
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:268
|
||||||
|
msgid "Search works …"
|
||||||
|
msgstr "Werke durchsuchen …"
|
||||||
|
|
||||||
|
#: src/dialogs/preferences.rs:30 src/window.rs:56
|
||||||
|
msgid "Select music library folder"
|
||||||
|
msgstr "Ordner der Musikbibliothek auswählen"
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:57 src/screens/recording_screen.rs:61
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr "Unbekannt"
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:78
|
||||||
|
msgid "Add some tracks."
|
||||||
|
msgstr "Fügen Sie Tracks hinzu."
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:145
|
||||||
|
msgid "Select audio files"
|
||||||
|
msgstr "Audiodateien auswählen"
|
||||||
|
|
||||||
|
#: src/screens/ensemble_screen.rs:35
|
||||||
|
msgid "Edit ensemble"
|
||||||
|
msgstr "Ensemble bearbeiten"
|
||||||
|
|
||||||
|
#: src/screens/ensemble_screen.rs:41
|
||||||
|
msgid "Delete ensemble"
|
||||||
|
msgstr "Ensemble löschen"
|
||||||
|
|
||||||
|
#: src/screens/person_screen.rs:39
|
||||||
|
msgid "Edit person"
|
||||||
|
msgstr "Person bearbeiten"
|
||||||
|
|
||||||
|
#: src/screens/person_screen.rs:45
|
||||||
|
msgid "Delete person"
|
||||||
|
msgstr "Person löschen"
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:34
|
||||||
|
msgid "Edit recording"
|
||||||
|
msgstr "Aufnahme bearbeiten"
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:40
|
||||||
|
msgid "Delete recording"
|
||||||
|
msgstr "Aufnahme löschen"
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:82
|
||||||
|
msgid "No tracks found."
|
||||||
|
msgstr "Keine Tracks gefunden."
|
||||||
|
|
||||||
|
#: src/screens/work_screen.rs:36
|
||||||
|
msgid "Edit work"
|
||||||
|
msgstr "Werk bearbeiten"
|
||||||
|
|
||||||
|
#: src/screens/work_screen.rs:42
|
||||||
|
msgid "Delete work"
|
||||||
|
msgstr "Werk löschen"
|
||||||
|
|
||||||
|
#: src/widgets/poe_list.rs:52
|
||||||
|
msgid "No persons or ensembles found."
|
||||||
|
msgstr "Keine Personen oder Ensembles gefunden."
|
||||||
336
po/musicus.pot
Normal file
336
po/musicus.pot
Normal file
|
|
@ -0,0 +1,336 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the musicus package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: musicus\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-11-02 00:33+0100\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:22 res/ui/instrument_editor.ui:22
|
||||||
|
msgid "Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:46 res/ui/performance_editor.ui:155
|
||||||
|
#: res/ui/performance_editor.ui:186
|
||||||
|
msgid "Ensemble"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:49 res/ui/instrument_editor.ui:49
|
||||||
|
#: res/ui/part_editor.ui:241 res/ui/performance_editor.ui:219
|
||||||
|
#: res/ui/person_editor.ui:72 res/ui/recording_editor.ui:225
|
||||||
|
#: res/ui/section_editor.ui:49 res/ui/track_editor.ui:45
|
||||||
|
#: res/ui/tracks_editor.ui:268 res/ui/work_editor.ui:389
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_editor.ui:57 res/ui/instrument_editor.ui:57
|
||||||
|
#: res/ui/part_editor.ui:249 res/ui/performance_editor.ui:227
|
||||||
|
#: res/ui/person_editor.ui:80 res/ui/recording_editor.ui:233
|
||||||
|
#: res/ui/section_editor.ui:57 res/ui/track_editor.ui:53
|
||||||
|
#: res/ui/tracks_editor.ui:253 res/ui/work_editor.ui:397
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:90 res/ui/work_screen.ui:90
|
||||||
|
msgid "Search recordings …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:143 res/ui/person_screen.ui:188
|
||||||
|
#: res/ui/work_screen.ui:143
|
||||||
|
msgid "Recordings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_screen.ui:191 res/ui/work_screen.ui:191
|
||||||
|
#: src/dialogs/recording_selector.rs:218 src/screens/ensemble_screen.rs:76
|
||||||
|
#: src/screens/person_screen.rs:94 src/screens/work_screen.rs:77
|
||||||
|
msgid "No recordings found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_selector.ui:52
|
||||||
|
msgid "No ensembles found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/ensemble_selector.ui:72
|
||||||
|
msgid "Select ensemble"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/instrument_editor.ui:46
|
||||||
|
msgid "Instrument"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/instrument_selector.ui:52
|
||||||
|
msgid "No instruments found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/instrument_selector.ui:72
|
||||||
|
msgid "Select instrument"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:29 res/ui/work_editor.ui:48
|
||||||
|
msgid "Composer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:52 res/ui/section_editor.ui:22
|
||||||
|
#: res/ui/work_editor.ui:70
|
||||||
|
msgid "Title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:75 res/ui/performance_editor.ui:45
|
||||||
|
#: res/ui/performance_editor.ui:129 res/ui/performance_editor.ui:173
|
||||||
|
#: res/ui/recording_editor.ui:47 res/ui/tracks_editor.ui:49
|
||||||
|
#: res/ui/work_editor.ui:34 src/dialogs/part_editor.rs:99
|
||||||
|
#: src/dialogs/performance_editor.rs:112 src/dialogs/performance_editor.rs:122
|
||||||
|
#: src/dialogs/performance_editor.rs:136
|
||||||
|
msgid "Select …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:119 res/ui/recording_editor.ui:84
|
||||||
|
#: res/ui/work_editor.ui:83
|
||||||
|
msgid "Overview"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:150 res/ui/work_editor.ui:114
|
||||||
|
msgid "No instruments added."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:225 res/ui/work_editor.ui:189
|
||||||
|
msgid "Instruments"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/part_editor.ui:238
|
||||||
|
msgid "Work part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:22
|
||||||
|
msgid "Role"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:87
|
||||||
|
msgid "Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:110 res/ui/performance_editor.ui:142
|
||||||
|
#: res/ui/person_editor.ui:69
|
||||||
|
msgid "Person"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/performance_editor.ui:216
|
||||||
|
msgid "Performance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_editor.ui:22
|
||||||
|
msgid "First name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_editor.ui:45
|
||||||
|
msgid "Last name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_list.ui:28 res/ui/work_selector.ui:69
|
||||||
|
msgid "Search persons …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:90
|
||||||
|
msgid "Search works and recordings …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:143
|
||||||
|
msgid "Works"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_screen.ui:236
|
||||||
|
msgid "No works or recordings found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/person_selector.ui:19
|
||||||
|
msgid "Select person"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/poe_list.ui:28
|
||||||
|
msgid "Search persons and ensembles …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:14
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:19
|
||||||
|
msgid "Music library"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:25
|
||||||
|
msgid "Music library folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:27
|
||||||
|
msgid "None selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/preferences.ui:30
|
||||||
|
msgid "Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:29
|
||||||
|
msgid "Comment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:71 res/ui/tracks_editor.ui:65
|
||||||
|
#: res/ui/work_editor.ui:386
|
||||||
|
msgid "Work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:115
|
||||||
|
msgid "No performers added."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:209 res/ui/tracks_editor.ui:83
|
||||||
|
msgid "Performers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_editor.ui:222 res/ui/tracks_editor.ui:24
|
||||||
|
msgid "Recording"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_screen.ui:96 res/ui/tracks_editor.ui:250
|
||||||
|
msgid "Tracks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:15
|
||||||
|
msgid "Select a recording"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:28 res/ui/work_selector.ui:180
|
||||||
|
msgid "Select a composer on the left."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/recording_selector.ui:72 res/ui/recording_selector.ui:187
|
||||||
|
#: src/dialogs/recording_selector.rs:112 src/screens/person_screen.rs:68
|
||||||
|
msgid "No works found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/section_editor.ui:46
|
||||||
|
msgid "Work section"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/track_editor.ui:29
|
||||||
|
msgid "Select a recording of a work with multiple parts."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/track_editor.ui:42
|
||||||
|
msgid "Track"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:15 res/ui/window.ui:104 res/ui/window.ui:206
|
||||||
|
msgid "Musicus"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:51 res/ui/window.ui:141
|
||||||
|
msgid "Welcome to Musicus!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:67
|
||||||
|
msgid ""
|
||||||
|
"Get startet by selecting something from the sidebar or adding new things to "
|
||||||
|
"your library using the button in the top left corner."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:157
|
||||||
|
msgid ""
|
||||||
|
"Get startet by selecting the folder containing your music files! Musicus "
|
||||||
|
"will create a new database there or open one that already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:170
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/window.ui:320
|
||||||
|
msgid "Preferences"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/work_editor.ui:221
|
||||||
|
msgid "No work parts added."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/work_editor.ui:373
|
||||||
|
msgid "Structure"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:113 src/widgets/person_list.rs:37
|
||||||
|
msgid "No persons found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:167
|
||||||
|
msgid "Select work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: res/ui/work_selector.ui:268
|
||||||
|
msgid "Search works …"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/dialogs/preferences.rs:30 src/window.rs:56
|
||||||
|
msgid "Select music library folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:57 src/screens/recording_screen.rs:61
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:78
|
||||||
|
msgid "Add some tracks."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/dialogs/tracks_editor.rs:145
|
||||||
|
msgid "Select audio files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/ensemble_screen.rs:35
|
||||||
|
msgid "Edit ensemble"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/ensemble_screen.rs:41
|
||||||
|
msgid "Delete ensemble"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/person_screen.rs:39
|
||||||
|
msgid "Edit person"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/person_screen.rs:45
|
||||||
|
msgid "Delete person"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:34
|
||||||
|
msgid "Edit recording"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:40
|
||||||
|
msgid "Delete recording"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/recording_screen.rs:82
|
||||||
|
msgid "No tracks found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/work_screen.rs:36
|
||||||
|
msgid "Edit work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/screens/work_screen.rs:42
|
||||||
|
msgid "Delete work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/widgets/poe_list.rs:52
|
||||||
|
msgid "No persons or ensembles found."
|
||||||
|
msgstr ""
|
||||||
|
|
@ -72,7 +72,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="label" translatable="yes">Auswählen …</property>
|
<property name="label" translatable="yes">Select …</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
||||||
1
src/config.rs.in
Normal file
1
src/config.rs.in
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
pub static LOCALEDIR: &str = @LOCALEDIR@;
|
||||||
|
|
@ -2,6 +2,7 @@ use super::{InstrumentSelector, PersonSelector};
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -95,7 +96,7 @@ impl PartEditor {
|
||||||
|
|
||||||
reset_composer_button.connect_clicked(clone!(@strong result => move |_| {
|
reset_composer_button.connect_clicked(clone!(@strong result => move |_| {
|
||||||
result.composer.replace(None);
|
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 |_| {
|
add_instrument_button.connect_clicked(clone!(@strong result => move |_| {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -108,7 +109,7 @@ where
|
||||||
result.person.replace(Some(person.clone()));
|
result.person.replace(Some(person.clone()));
|
||||||
result.person_label.set_text(&person.name_fl());
|
result.person_label.set_text(&person.name_fl());
|
||||||
result.ensemble.replace(None);
|
result.ensemble.replace(None);
|
||||||
result.ensemble_label.set_text("Select …");
|
result.ensemble_label.set_text(&gettext("Select …"));
|
||||||
result.save_button.set_sensitive(true);
|
result.save_button.set_sensitive(true);
|
||||||
})).show();
|
})).show();
|
||||||
}));
|
}));
|
||||||
|
|
@ -118,7 +119,7 @@ where
|
||||||
result.ensemble.replace(Some(ensemble.clone()));
|
result.ensemble.replace(Some(ensemble.clone()));
|
||||||
result.ensemble_label.set_text(&ensemble.name);
|
result.ensemble_label.set_text(&ensemble.name);
|
||||||
result.person.replace(None);
|
result.person.replace(None);
|
||||||
result.person_label.set_text("Select …");
|
result.person_label.set_text(&gettext("Select …"));
|
||||||
result.save_button.set_sensitive(true);
|
result.save_button.set_sensitive(true);
|
||||||
})).show();
|
})).show();
|
||||||
}));
|
}));
|
||||||
|
|
@ -132,7 +133,7 @@ where
|
||||||
|
|
||||||
reset_role_button.connect_clicked(clone!(@strong result => move |_| {
|
reset_role_button.connect_clicked(clone!(@strong result => move |_| {
|
||||||
result.role.replace(None);
|
result.role.replace(None);
|
||||||
result.role_label.set_text("Select …");
|
result.role_label.set_text(&gettext("Select …"));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
result.window.set_transient_for(Some(parent));
|
result.window.set_transient_for(Some(parent));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -23,8 +24,11 @@ impl Preferences {
|
||||||
music_library_path_row.set_subtitle(Some(path.to_str().unwrap()));
|
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 |_| {
|
select_music_library_path_button.connect_clicked(
|
||||||
let dialog = gtk::FileChooserNative::new(Some("Select music library folder"), Some(&window), gtk::FileChooserAction::SelectFolder, None, None);
|
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 gtk::ResponseType::Accept = dialog.run() {
|
||||||
if let Some(path) = dialog.get_filename() {
|
if let Some(path) = dialog.get_filename() {
|
||||||
|
|
@ -37,7 +41,8 @@ impl Preferences {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
Self { window }
|
Self { window }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use super::*;
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use gio::prelude::*;
|
use gio::prelude::*;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
@ -25,8 +26,7 @@ impl RecordingSelector {
|
||||||
P: IsA<gtk::Window>,
|
P: IsA<gtk::Window>,
|
||||||
F: Fn(RecordingDescription) -> () + 'static,
|
F: Fn(RecordingDescription) -> () + 'static,
|
||||||
{
|
{
|
||||||
let builder =
|
let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector.ui");
|
||||||
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector.ui");
|
|
||||||
|
|
||||||
get_widget!(builder, gtk::Window, window);
|
get_widget!(builder, gtk::Window, window);
|
||||||
get_widget!(builder, libhandy::Leaflet, leaflet);
|
get_widget!(builder, libhandy::Leaflet, leaflet);
|
||||||
|
|
@ -92,9 +92,8 @@ struct RecordingSelectorPersonScreen {
|
||||||
|
|
||||||
impl RecordingSelectorPersonScreen {
|
impl RecordingSelectorPersonScreen {
|
||||||
pub fn new(backend: Rc<Backend>, selector: Rc<RecordingSelector>, person: Person) -> Rc<Self> {
|
pub fn new(backend: Rc<Backend>, selector: Rc<RecordingSelector>, person: Person) -> Rc<Self> {
|
||||||
let builder = gtk::Builder::from_resource(
|
let builder =
|
||||||
"/de/johrpan/musicus/ui/recording_selector_screen.ui",
|
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector_screen.ui");
|
||||||
);
|
|
||||||
|
|
||||||
get_widget!(builder, gtk::Box, widget);
|
get_widget!(builder, gtk::Box, widget);
|
||||||
get_widget!(builder, libhandy::HeaderBar, header);
|
get_widget!(builder, libhandy::HeaderBar, header);
|
||||||
|
|
@ -110,7 +109,7 @@ impl RecordingSelectorPersonScreen {
|
||||||
label.upcast()
|
label.upcast()
|
||||||
},
|
},
|
||||||
|_| true,
|
|_| true,
|
||||||
"No works found.",
|
&gettext("No works found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
stack.add_named(&work_list.widget, "content");
|
stack.add_named(&work_list.widget, "content");
|
||||||
|
|
@ -186,9 +185,8 @@ impl RecordingSelectorWorkScreen {
|
||||||
selector: Rc<RecordingSelector>,
|
selector: Rc<RecordingSelector>,
|
||||||
work: WorkDescription,
|
work: WorkDescription,
|
||||||
) -> Rc<Self> {
|
) -> Rc<Self> {
|
||||||
let builder = gtk::Builder::from_resource(
|
let builder =
|
||||||
"/de/johrpan/musicus/ui/recording_selector_screen.ui",
|
gtk::Builder::from_resource("/de/johrpan/musicus/ui/recording_selector_screen.ui");
|
||||||
);
|
|
||||||
|
|
||||||
get_widget!(builder, gtk::Box, widget);
|
get_widget!(builder, gtk::Box, widget);
|
||||||
get_widget!(builder, libhandy::HeaderBar, header);
|
get_widget!(builder, libhandy::HeaderBar, header);
|
||||||
|
|
@ -217,7 +215,7 @@ impl RecordingSelectorWorkScreen {
|
||||||
vbox.upcast()
|
vbox.upcast()
|
||||||
},
|
},
|
||||||
|_| true,
|
|_| true,
|
||||||
"No recordings found.",
|
&gettext("No recordings found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
stack.add_named(&recording_list.widget, "content");
|
stack.add_named(&recording_list.widget, "content");
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use super::*;
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -53,7 +54,7 @@ impl TracksEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
let title = if title_parts.is_empty() {
|
let title = if title_parts.is_empty() {
|
||||||
String::from("Unknown")
|
gettext("Unknown")
|
||||||
} else {
|
} else {
|
||||||
title_parts.join(", ")
|
title_parts.join(", ")
|
||||||
};
|
};
|
||||||
|
|
@ -74,7 +75,7 @@ impl TracksEditor {
|
||||||
vbox.upcast()
|
vbox.upcast()
|
||||||
}),
|
}),
|
||||||
|_| true,
|
|_| true,
|
||||||
"Add some tracks.",
|
&gettext("Add some tracks."),
|
||||||
);
|
);
|
||||||
|
|
||||||
let autofill_parts = Rc::new(clone!(@strong recording, @strong tracks, @strong track_list => move || {
|
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 |_| {
|
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 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_select_multiple(true);
|
||||||
dialog.set_current_folder(&music_library_path);
|
dialog.set_current_folder(&music_library_path);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ use glib::clone;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
mod config;
|
||||||
mod backend;
|
mod backend;
|
||||||
mod database;
|
mod database;
|
||||||
mod dialogs;
|
mod dialogs;
|
||||||
|
|
@ -23,6 +24,10 @@ use window::Window;
|
||||||
mod resources;
|
mod resources;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
gettextrs::setlocale(gettextrs::LocaleCategory::LcAll, "");
|
||||||
|
gettextrs::bindtextdomain("musicus", config::LOCALEDIR);
|
||||||
|
gettextrs::textdomain("musicus");
|
||||||
|
|
||||||
gtk::init().expect("Failed to initialize GTK!");
|
gtk::init().expect("Failed to initialize GTK!");
|
||||||
libhandy::init();
|
libhandy::init();
|
||||||
resources::init().expect("Failed to initialize resources!");
|
resources::init().expect("Failed to initialize resources!");
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,21 @@
|
||||||
|
prefix = get_option('prefix')
|
||||||
|
localedir = join_paths(prefix, get_option('localedir'))
|
||||||
|
|
||||||
|
global_conf = configuration_data()
|
||||||
|
global_conf.set_quoted('LOCALEDIR', localedir)
|
||||||
|
config_rs = configure_file(
|
||||||
|
input: 'config.rs.in',
|
||||||
|
output: 'config.rs',
|
||||||
|
configuration: global_conf
|
||||||
|
)
|
||||||
|
|
||||||
|
run_command(
|
||||||
|
'cp',
|
||||||
|
config_rs,
|
||||||
|
meson.current_source_dir(),
|
||||||
|
check: true
|
||||||
|
)
|
||||||
|
|
||||||
resource_conf = configuration_data()
|
resource_conf = configuration_data()
|
||||||
resource_conf.set_quoted('RESOURCEFILE', resources.full_path())
|
resource_conf.set_quoted('RESOURCEFILE', resources.full_path())
|
||||||
resource_rs = configure_file(
|
resource_rs = configure_file(
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use super::*;
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -19,8 +20,7 @@ pub struct EnsembleScreen {
|
||||||
|
|
||||||
impl EnsembleScreen {
|
impl EnsembleScreen {
|
||||||
pub fn new(backend: Rc<Backend>, ensemble: Ensemble) -> Rc<Self> {
|
pub fn new(backend: Rc<Backend>, ensemble: Ensemble) -> Rc<Self> {
|
||||||
let builder =
|
let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/ensemble_screen.ui");
|
||||||
gtk::Builder::from_resource("/de/johrpan/musicus/ui/ensemble_screen.ui");
|
|
||||||
|
|
||||||
get_widget!(builder, gtk::Box, widget);
|
get_widget!(builder, gtk::Box, widget);
|
||||||
get_widget!(builder, libhandy::HeaderBar, header);
|
get_widget!(builder, libhandy::HeaderBar, header);
|
||||||
|
|
@ -32,13 +32,13 @@ impl EnsembleScreen {
|
||||||
|
|
||||||
header.set_title(Some(&ensemble.name));
|
header.set_title(Some(&ensemble.name));
|
||||||
|
|
||||||
let edit_menu_item = gio::MenuItem::new(Some("Edit ensemble"), None);
|
let edit_menu_item = gio::MenuItem::new(Some(&gettext("Edit ensemble")), None);
|
||||||
edit_menu_item.set_action_and_target_value(
|
edit_menu_item.set_action_and_target_value(
|
||||||
Some("win.edit-ensemble"),
|
Some("win.edit-ensemble"),
|
||||||
Some(&glib::Variant::from(ensemble.id)),
|
Some(&glib::Variant::from(ensemble.id)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let delete_menu_item = gio::MenuItem::new(Some("Delete ensemble"), None);
|
let delete_menu_item = gio::MenuItem::new(Some(&gettext("Delete ensemble")), None);
|
||||||
delete_menu_item.set_action_and_target_value(
|
delete_menu_item.set_action_and_target_value(
|
||||||
Some("win.delete-ensemble"),
|
Some("win.delete-ensemble"),
|
||||||
Some(&glib::Variant::from(ensemble.id)),
|
Some(&glib::Variant::from(ensemble.id)),
|
||||||
|
|
@ -73,7 +73,7 @@ impl EnsembleScreen {
|
||||||
let text = recording.work.get_title() + &recording.get_performers();
|
let text = recording.work.get_title() + &recording.get_performers();
|
||||||
search.is_empty() || text.contains(&search)
|
search.is_empty() || text.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No recordings found.",
|
&gettext("No recordings found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
recording_frame.add(&recording_list.widget.clone());
|
recording_frame.add(&recording_list.widget.clone());
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use super::*;
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -35,13 +36,13 @@ impl PersonScreen {
|
||||||
|
|
||||||
header.set_title(Some(&person.name_fl()));
|
header.set_title(Some(&person.name_fl()));
|
||||||
|
|
||||||
let edit_menu_item = gio::MenuItem::new(Some("Edit person"), None);
|
let edit_menu_item = gio::MenuItem::new(Some(&gettext("Edit person")), None);
|
||||||
edit_menu_item.set_action_and_target_value(
|
edit_menu_item.set_action_and_target_value(
|
||||||
Some("win.edit-person"),
|
Some("win.edit-person"),
|
||||||
Some(&glib::Variant::from(person.id)),
|
Some(&glib::Variant::from(person.id)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let delete_menu_item = gio::MenuItem::new(Some("Delete person"), None);
|
let delete_menu_item = gio::MenuItem::new(Some(&gettext("Delete person")), None);
|
||||||
delete_menu_item.set_action_and_target_value(
|
delete_menu_item.set_action_and_target_value(
|
||||||
Some("win.delete-person"),
|
Some("win.delete-person"),
|
||||||
Some(&glib::Variant::from(person.id)),
|
Some(&glib::Variant::from(person.id)),
|
||||||
|
|
@ -64,7 +65,7 @@ impl PersonScreen {
|
||||||
let title = work.title.to_lowercase();
|
let title = work.title.to_lowercase();
|
||||||
search.is_empty() || title.contains(&search)
|
search.is_empty() || title.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No works found.",
|
&gettext("No works found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
let recording_list = List::new(
|
let recording_list = List::new(
|
||||||
|
|
@ -90,7 +91,7 @@ impl PersonScreen {
|
||||||
let text = recording.work.get_title() + &recording.get_performers();
|
let text = recording.work.get_title() + &recording.get_performers();
|
||||||
search.is_empty() || text.contains(&search)
|
search.is_empty() || text.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No recordings found.",
|
&gettext("No recordings found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
work_frame.add(&work_list.widget);
|
work_frame.add(&work_list.widget);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -30,13 +31,13 @@ impl RecordingScreen {
|
||||||
header.set_title(Some(&recording.work.get_title()));
|
header.set_title(Some(&recording.work.get_title()));
|
||||||
header.set_subtitle(Some(&recording.get_performers()));
|
header.set_subtitle(Some(&recording.get_performers()));
|
||||||
|
|
||||||
let edit_menu_item = gio::MenuItem::new(Some("Edit recording"), None);
|
let edit_menu_item = gio::MenuItem::new(Some(&gettext("Edit recording")), None);
|
||||||
edit_menu_item.set_action_and_target_value(
|
edit_menu_item.set_action_and_target_value(
|
||||||
Some("win.edit-recording"),
|
Some("win.edit-recording"),
|
||||||
Some(&glib::Variant::from(recording.id)),
|
Some(&glib::Variant::from(recording.id)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let delete_menu_item = gio::MenuItem::new(Some("Delete recording"), None);
|
let delete_menu_item = gio::MenuItem::new(Some(&gettext("Delete recording")), None);
|
||||||
delete_menu_item.set_action_and_target_value(
|
delete_menu_item.set_action_and_target_value(
|
||||||
Some("win.delete-recording"),
|
Some("win.delete-recording"),
|
||||||
Some(&glib::Variant::from(recording.id)),
|
Some(&glib::Variant::from(recording.id)),
|
||||||
|
|
@ -57,7 +58,7 @@ impl RecordingScreen {
|
||||||
}
|
}
|
||||||
|
|
||||||
let title = if title_parts.is_empty() {
|
let title = if title_parts.is_empty() {
|
||||||
String::from("Unknown")
|
gettext("Unknown")
|
||||||
} else {
|
} else {
|
||||||
title_parts.join(", ")
|
title_parts.join(", ")
|
||||||
};
|
};
|
||||||
|
|
@ -78,7 +79,7 @@ impl RecordingScreen {
|
||||||
vbox.upcast()
|
vbox.upcast()
|
||||||
}),
|
}),
|
||||||
|_| true,
|
|_| true,
|
||||||
"No tracks found.",
|
&gettext("No tracks found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
frame.add(&list.widget);
|
frame.add(&list.widget);
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ use super::*;
|
||||||
use crate::backend::*;
|
use crate::backend::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -32,13 +33,13 @@ impl WorkScreen {
|
||||||
header.set_title(Some(&work.title));
|
header.set_title(Some(&work.title));
|
||||||
header.set_subtitle(Some(&work.composer.name_fl()));
|
header.set_subtitle(Some(&work.composer.name_fl()));
|
||||||
|
|
||||||
let edit_menu_item = gio::MenuItem::new(Some("Edit work"), None);
|
let edit_menu_item = gio::MenuItem::new(Some(&gettext("Edit work")), None);
|
||||||
edit_menu_item.set_action_and_target_value(
|
edit_menu_item.set_action_and_target_value(
|
||||||
Some("win.edit-work"),
|
Some("win.edit-work"),
|
||||||
Some(&glib::Variant::from(work.id)),
|
Some(&glib::Variant::from(work.id)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let delete_menu_item = gio::MenuItem::new(Some("Delete work"), None);
|
let delete_menu_item = gio::MenuItem::new(Some(&gettext("Delete work")), None);
|
||||||
delete_menu_item.set_action_and_target_value(
|
delete_menu_item.set_action_and_target_value(
|
||||||
Some("win.delete-work"),
|
Some("win.delete-work"),
|
||||||
Some(&glib::Variant::from(work.id)),
|
Some(&glib::Variant::from(work.id)),
|
||||||
|
|
@ -73,7 +74,7 @@ impl WorkScreen {
|
||||||
let text = recording.work.get_title() + &recording.get_performers();
|
let text = recording.work.get_title() + &recording.get_performers();
|
||||||
search.is_empty() || text.contains(&search)
|
search.is_empty() || text.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No recordings found.",
|
&gettext("No recordings found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
recording_frame.add(&recording_list.widget);
|
recording_frame.add(&recording_list.widget);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -33,7 +34,7 @@ impl PersonList {
|
||||||
let name = person.name_fl().to_lowercase();
|
let name = person.name_fl().to_lowercase();
|
||||||
search.is_empty() || name.contains(&search)
|
search.is_empty() || name.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No persons found.",
|
&gettext("No persons found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
scrolled_window.add(&list.widget);
|
scrolled_window.add(&list.widget);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::backend::Backend;
|
use crate::backend::Backend;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk_macros::get_widget;
|
use gtk_macros::get_widget;
|
||||||
|
|
@ -48,7 +49,7 @@ impl PoeList {
|
||||||
let title = poe.get_title().to_lowercase();
|
let title = poe.get_title().to_lowercase();
|
||||||
search.is_empty() || title.contains(&search)
|
search.is_empty() || title.contains(&search)
|
||||||
}),
|
}),
|
||||||
"No persons or ensembles found.",
|
&gettext("No persons or ensembles found."),
|
||||||
);
|
);
|
||||||
|
|
||||||
scrolled_window.add(&list.widget);
|
scrolled_window.add(&list.widget);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ use crate::dialogs::*;
|
||||||
use crate::screens::*;
|
use crate::screens::*;
|
||||||
use crate::widgets::*;
|
use crate::widgets::*;
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
|
use gettextrs::gettext;
|
||||||
use gio::prelude::*;
|
use gio::prelude::*;
|
||||||
use glib::clone;
|
use glib::clone;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
@ -51,7 +52,12 @@ impl Window {
|
||||||
result.window.set_application(Some(app));
|
result.window.set_application(Some(app));
|
||||||
|
|
||||||
select_music_library_path_button.connect_clicked(clone!(@strong result => move |_| {
|
select_music_library_path_button.connect_clicked(clone!(@strong result => move |_| {
|
||||||
let dialog = gtk::FileChooserNative::new(Some("Select music library folder"), Some(&result.window), gtk::FileChooserAction::SelectFolder, None, None);
|
let dialog = gtk::FileChooserNative::new(
|
||||||
|
Some(&gettext("Select music library folder")),
|
||||||
|
Some(&result.window),
|
||||||
|
gtk::FileChooserAction::SelectFolder,
|
||||||
|
None,
|
||||||
|
None);
|
||||||
|
|
||||||
if let gtk::ResponseType::Accept = dialog.run() {
|
if let gtk::ResponseType::Accept = dialog.run() {
|
||||||
if let Some(path) = dialog.get_filename() {
|
if let Some(path) = dialog.get_filename() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue