commit 0d20581183a04172ad3d10e75affd4fe37917617
parent 55d0af93d5c78c9e4ac8e3566a166694f86ecad7
Author: Jacki <jacki@thejackimonster.de>
Date: Tue, 2 Apr 2024 02:33:21 +0200
Add first localization
Signed-off-by: Jacki <jacki@thejackimonster.de>
Diffstat:
40 files changed, 1614 insertions(+), 34 deletions(-)
diff --git a/meson.build b/meson.build
@@ -51,6 +51,7 @@ messenger_gtk_deps = [
]
messenger_gtk_args = [
+ '-DENABLE_NLS=1',
'-DMESSENGER_APPLICATION_BINARY="@0@"'.format(meson.project_name()),
'-DMESSENGER_APPLICATION_ID="@0@"'.format(messenger_gtk_id),
'-DMESSENGER_APPLICATION_VERSION="@0@"'.format(meson.project_version()),
@@ -67,6 +68,7 @@ else
]
endif
+subdir('po')
subdir('resources')
subdir('src')
diff --git a/po/LINGUAS b/po/LINGUAS
@@ -0,0 +1,2 @@
+de
+en
+\ No newline at end of file
diff --git a/po/POTFILES b/po/POTFILES
@@ -0,0 +1,99 @@
+resources/ui/about.ui
+resources/ui/account_entry.ui
+resources/ui/accounts.ui
+resources/ui/chat_entry.ui
+resources/ui/chat.ui
+resources/ui/contact_entry.ui
+resources/ui/contact_info.ui
+resources/ui/contacts.ui
+resources/ui/delete_messages.ui
+resources/ui/file_entry.ui
+resources/ui/file_load_entry.ui
+resources/ui/invite_contact.ui
+resources/ui/media_preview.ui
+resources/ui/message_content.ui
+resources/ui/message-sent.ui
+resources/ui/message-status.ui
+resources/ui/message.ui
+resources/ui/messenger.ui
+resources/ui/new_account.ui
+resources/ui/new_contact.ui
+resources/ui/new_group.ui
+resources/ui/new_lobby.ui
+resources/ui/new_platform.ui
+resources/ui/new_tag.ui
+resources/ui/picker.ui
+resources/ui/play_media.ui
+resources/ui/send_file.ui
+resources/ui/settings.ui
+resources/ui/tag.ui
+src/application.c
+src/application.h
+src/chat/messenger.c
+src/chat/messenger.h
+src/contact.c
+src/contact.h
+src/event.c
+src/event.h
+src/file.c
+src/file.h
+src/messenger_gtk.c
+src/request.c
+src/request.h
+src/resources.c
+src/resources.h
+src/ui/about.c
+src/ui/about.h
+src/ui/account_entry.c
+src/ui/account_entry.h
+src/ui/accounts.c
+src/ui/accounts.h
+src/ui.c
+src/ui/chat.c
+src/ui/chat_entry.c
+src/ui/chat_entry.h
+src/ui/chat.h
+src/ui/contact_entry.c
+src/ui/contact_entry.h
+src/ui/contact_info.c
+src/ui/contact_info.h
+src/ui/contacts.c
+src/ui/contacts.h
+src/ui/delete_messages.c
+src/ui/delete_messages.h
+src/ui/file_entry.c
+src/ui/file_entry.h
+src/ui/file_load_entry.c
+src/ui/file_load_entry.h
+src/ui.h
+src/ui/invite_contact.c
+src/ui/invite_contact.h
+src/ui/media_preview.c
+src/ui/media_preview.h
+src/ui/message.c
+src/ui/message.h
+src/ui/messenger.c
+src/ui/messenger.h
+src/ui/new_account.c
+src/ui/new_account.h
+src/ui/new_contact.c
+src/ui/new_contact.h
+src/ui/new_group.c
+src/ui/new_group.h
+src/ui/new_lobby.c
+src/ui/new_lobby.h
+src/ui/new_platform.c
+src/ui/new_platform.h
+src/ui/new_tag.c
+src/ui/new_tag.h
+src/ui/picker.c
+src/ui/picker.h
+src/ui/play_media.c
+src/ui/play_media.h
+src/ui/send_file.c
+src/ui/send_file.h
+src/ui/settings.c
+src/ui/settings.h
+src/ui/tag.c
+src/ui/tag.h
+src/util.h
+\ No newline at end of file
diff --git a/po/de.po b/po/de.po
@@ -0,0 +1,447 @@
+#
+# Tobias Frisch <>, 2024.
+#
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Project-Id-Version: unnamed project\n"
+"Last-Translator: Tobias Frisch <>\n"
+"Language-Team: German\n"
+"Language: de\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"PO-Revision-Date: 2024-04-02 02:13+0200\n"
+"X-Generator: Gtranslator 46.0\n"
+
+#: resources/ui/about.ui:32
+msgid ""
+"This application is part of GNUnet.\n"
+"Copyright (C) 2021--2024 GNUnet e.V."
+msgstr ""
+"Diese Anwendung ist Teil von GNUnet.\n"
+"Copyright (C) 2021--2024 GNUnet e.V."
+
+#: resources/ui/about.ui:38
+msgid "Tobias Frisch"
+msgstr "Tobias Frisch"
+
+#: resources/ui/about.ui:71 resources/ui/accounts.ui:42
+#: resources/ui/contact_info.ui:55 resources/ui/contacts.ui:42
+#: resources/ui/invite_contact.ui:42
+msgid "Close"
+msgstr "Schließen"
+
+#: resources/ui/accounts.ui:27
+msgid "Accounts"
+msgstr "Konten"
+
+#: resources/ui/accounts.ui:105 resources/ui/messenger.ui:367
+msgid "Add Account"
+msgstr "Konto hinzufügen"
+
+#: resources/ui/chat.ui:721 resources/ui/contact_info.ui:188
+msgid "Reveal Identity"
+msgstr "Identität anzeigen"
+
+#: resources/ui/chat.ui:771 resources/ui/contact_info.ui:237
+msgid "Block Contact"
+msgstr "Kontakt sperren"
+
+#: resources/ui/chat.ui:817 resources/ui/contact_info.ui:281
+msgid "Unblock Contact"
+msgstr "Kontakt entsperren"
+
+#: resources/ui/chat.ui:871
+msgid "Leave Chat"
+msgstr "Chat verlassen"
+
+#: resources/ui/chat.ui:910 resources/ui/settings.ui:176
+#: resources/ui/settings.ui:181
+msgid "Notifications"
+msgstr "Benachrichtigungen"
+
+#: resources/ui/chat.ui:949 resources/ui/contacts.ui:27
+#: resources/ui/messenger.ui:574
+msgid "Contacts"
+msgstr "Kontake"
+
+#: resources/ui/chat.ui:998 resources/ui/invite_contact.ui:27
+msgid "Invite Contact"
+msgstr "Kontakt einladen"
+
+#: resources/ui/chat.ui:1038
+msgid "Media"
+msgstr "Medien"
+
+#: resources/ui/chat.ui:1086 resources/ui/settings.ui:676
+msgid "Files"
+msgstr "Dateien"
+
+#: resources/ui/chat.ui:1169
+msgid "Send Later"
+msgstr "Später senden"
+
+#: resources/ui/chat.ui:1184
+msgid "Send Now"
+msgstr "Jetzt senden"
+
+#: resources/ui/contact_info.ui:28
+msgid "Contact Information"
+msgstr "Kontaktinformationen"
+
+#: resources/ui/contact_info.ui:43
+msgid "Back"
+msgstr "Zurück"
+
+#: resources/ui/contact_info.ui:107 resources/ui/new_account.ui:103
+msgid "Name:"
+msgstr "Name:"
+
+#: resources/ui/contact_info.ui:333
+msgid "Open Private Chat"
+msgstr "Privaten Chat öffnen"
+
+#: resources/ui/contact_info.ui:405 resources/ui/new_contact.ui:271
+#: resources/ui/new_lobby.ui:354
+msgid "ID:"
+msgstr "ID:"
+
+#: resources/ui/contacts.ui:118
+msgid "Add Contact"
+msgstr "Kontakt hinzufügen"
+
+#: resources/ui/delete_messages.ui:14 resources/ui/new_lobby.ui:35
+#: resources/ui/settings.ui:35
+msgid "Off"
+msgstr "Aus"
+
+#: resources/ui/delete_messages.ui:18 resources/ui/new_lobby.ui:39
+#: resources/ui/settings.ui:39
+msgid "4 weeks"
+msgstr "4 Wochen"
+
+#: resources/ui/delete_messages.ui:22 resources/ui/new_lobby.ui:43
+#: resources/ui/settings.ui:43
+msgid "1 week"
+msgstr "1 Woche"
+
+#: resources/ui/delete_messages.ui:26 resources/ui/new_lobby.ui:47
+#: resources/ui/settings.ui:47
+msgid "1 day"
+msgstr "1 Tag"
+
+#: resources/ui/delete_messages.ui:30 resources/ui/new_lobby.ui:51
+#: resources/ui/settings.ui:51
+msgid "8 hours"
+msgstr "8 Stunden"
+
+#: resources/ui/delete_messages.ui:34 resources/ui/new_lobby.ui:55
+#: resources/ui/settings.ui:55
+msgid "1 hour"
+msgstr "1 Stunde"
+
+#: resources/ui/delete_messages.ui:38 resources/ui/new_lobby.ui:59
+#: resources/ui/settings.ui:59
+msgid "5 minutes"
+msgstr "5 Minuten"
+
+#: resources/ui/delete_messages.ui:42 resources/ui/new_lobby.ui:63
+#: resources/ui/settings.ui:63
+msgid "30 seconds"
+msgstr "30 Sekunden"
+
+#: resources/ui/delete_messages.ui:49
+msgid "Delete Messages"
+msgstr "Nachrichten löschen"
+
+#: resources/ui/delete_messages.ui:64 resources/ui/new_account.ui:43
+#: resources/ui/new_contact.ui:52 resources/ui/new_group.ui:43
+#: resources/ui/new_lobby.ui:86 resources/ui/new_platform.ui:43
+#: resources/ui/new_tag.ui:42 resources/ui/send_file.ui:41 src/ui/chat.c:638
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: resources/ui/delete_messages.ui:77 resources/ui/new_account.ui:56
+#: resources/ui/new_group.ui:81 resources/ui/new_platform.ui:56
+#: resources/ui/new_tag.ui:55 src/ui/chat.c:640
+msgid "Confirm"
+msgstr "Bestätigen"
+
+#: resources/ui/delete_messages.ui:108
+msgid "When do you want those messages to be deleted?"
+msgstr "Wann sollen diese Nachrichten gelöscht werden?"
+
+#: resources/ui/delete_messages.ui:148
+msgid "Hide this dialog in the future"
+msgstr "Diesen Dialog in Zukunft verstecken"
+
+#: resources/ui/messenger.ui:430 resources/ui/new_contact.ui:35
+msgid "New Contact"
+msgstr "Neuer Kontakt"
+
+#: resources/ui/messenger.ui:478 resources/ui/new_group.ui:28
+msgid "New Group"
+msgstr "Neue Gruppe"
+
+#: resources/ui/messenger.ui:526 resources/ui/new_platform.ui:28
+msgid "New Platform"
+msgstr "Neue Plattform"
+
+#: resources/ui/messenger.ui:622 resources/ui/settings.ui:70
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: resources/ui/messenger.ui:669
+msgid "About"
+msgstr "Info"
+
+#: resources/ui/messenger.ui:782
+msgid "Select a chat to start messaging..."
+msgstr "Wähle einen Chat um zu schreiben..."
+
+#: resources/ui/messenger.ui:811
+msgid "Messenger"
+msgstr "Messenger"
+
+#: resources/ui/messenger.ui:812
+msgid "GNUnet"
+msgstr "GNUnet"
+
+#: resources/ui/new_account.ui:28
+msgid "New Account"
+msgstr "Neues Konto"
+
+#: resources/ui/new_contact.ui:65
+msgid "Accept"
+msgstr "Annehmen"
+
+#: resources/ui/new_contact.ui:178
+msgid "Connection to camera failed!"
+msgstr "Verbindung zur Kamera fehlgeschlagen!"
+
+#: resources/ui/new_contact.ui:218
+msgid "No camera found!"
+msgstr "Keine Kamera gefunden!"
+
+#: resources/ui/new_group.ui:56
+msgid "Previous"
+msgstr "Vorherige"
+
+#: resources/ui/new_group.ui:68
+msgid "Next"
+msgstr "Nächste"
+
+#: resources/ui/new_group.ui:131
+msgid "Group:"
+msgstr "Gruppe:"
+
+#: resources/ui/new_lobby.ui:70
+msgid "New Lobby"
+msgstr "Neue Lobby"
+
+#: resources/ui/new_lobby.ui:99
+msgid "Generate"
+msgstr "Generieren"
+
+#: resources/ui/new_lobby.ui:112
+msgid "Copy"
+msgstr "Kopieren"
+
+#: resources/ui/new_lobby.ui:166
+msgid ""
+"Please notice that everyone with access to the lobby's code can enter its "
+"chat!"
+msgstr ""
+"Bitte beachten, dass jeder mit Zugang zum Lobby-Code dem Chat beitreten kann!"
+
+#: resources/ui/new_lobby.ui:234
+msgid "Delay until new lobby expires:"
+msgstr "Zeitdauer bis neue Lobby abläuft:"
+
+#: resources/ui/new_lobby.ui:304
+msgid "Generation of new lobby failed!"
+msgstr "Generierung der neuen Lobby gescheitert!"
+
+#: resources/ui/new_platform.ui:103
+msgid "Platform:"
+msgstr "Plattform:"
+
+#: resources/ui/new_tag.ui:102
+msgid "Tag:"
+msgstr "Label:"
+
+#: resources/ui/picker.ui:389
+msgid "Emoji"
+msgstr "Emoji"
+
+#: resources/ui/picker.ui:409
+msgid "GIF"
+msgstr "GIF"
+
+#: resources/ui/picker.ui:430
+msgid "Stickers"
+msgstr "Aufkleber"
+
+#: resources/ui/play_media.ui:132
+msgid "Video source invalid!"
+msgstr "Videoquelle invalide!"
+
+#: resources/ui/send_file.ui:54
+msgid "Send"
+msgstr "Senden"
+
+#: resources/ui/settings.ui:79
+msgid "General"
+msgstr "Allgemein"
+
+#: resources/ui/settings.ui:84
+msgid "System"
+msgstr "System"
+
+#: resources/ui/settings.ui:89 resources/ui/settings.ui:98
+msgid "Start on login"
+msgstr "Beim Anmelden starten"
+
+#: resources/ui/settings.ui:130 resources/ui/settings.ui:139
+msgid "Run in background"
+msgstr "Im Hintergrund ausführen"
+
+#: resources/ui/settings.ui:186 resources/ui/settings.ui:195
+msgid "Enable notifications"
+msgstr "Benachrichtigungen aktivieren"
+
+#: resources/ui/settings.ui:227 resources/ui/settings.ui:236
+msgid "Play notification sounds"
+msgstr "Benachrichtigungsgeräusche abspielen"
+
+#: resources/ui/settings.ui:274
+msgid "Privacy"
+msgstr "Privatsphäre"
+
+#: resources/ui/settings.ui:279
+msgid "Blocked"
+msgstr "Blockiert"
+
+#: resources/ui/settings.ui:294 src/ui/settings.c:387
+#, c-format
+msgid "%u blocked contacts"
+msgstr "%u blockierte Kontakte"
+
+#: resources/ui/settings.ui:342
+msgid "Messaging"
+msgstr "Kommunikation"
+
+#: resources/ui/settings.ui:347 resources/ui/settings.ui:356
+msgid "Send read receipts"
+msgstr "Lesebestätigungen senden"
+
+#: resources/ui/settings.ui:390
+msgid "Disappearing messages"
+msgstr "Verschwindende Nachrichten"
+
+#: resources/ui/settings.ui:395 resources/ui/settings.ui:404
+msgid "Delete messages automatically"
+msgstr "Nachrichten automatisch löschen"
+
+#: resources/ui/settings.ui:446
+msgid "History"
+msgstr "Historie"
+
+#: resources/ui/settings.ui:451 resources/ui/settings.ui:460
+msgid "Clear history automatically"
+msgstr "Historie automatisch leeren"
+
+#: resources/ui/settings.ui:501 resources/ui/settings.ui:508
+msgid "Clear all history"
+msgstr "Gesamte Historie leeren"
+
+#: resources/ui/settings.ui:540
+msgid "Network"
+msgstr "Netzwerk"
+
+#: resources/ui/settings.ui:545
+msgid "Invitations"
+msgstr "Einladungen"
+
+#: resources/ui/settings.ui:550 resources/ui/settings.ui:559
+msgid "Accept invitations automatically"
+msgstr "Einladungen automatisch annehmen"
+
+#: resources/ui/settings.ui:591 resources/ui/settings.ui:600
+msgid "Delete invitations automatically"
+msgstr "Einladungen automatisch löschen"
+
+#: resources/ui/settings.ui:640 resources/ui/settings.ui:647
+msgid "Delete all invitations"
+msgstr "Alle Einladungen löschen"
+
+#: resources/ui/settings.ui:681 resources/ui/settings.ui:690
+msgid "Accept files automatically"
+msgstr "Automatisch Dateien annehmen"
+
+#: resources/ui/settings.ui:722 resources/ui/settings.ui:731
+msgid "Download folder"
+msgstr "Download-Ordner"
+
+#: resources/ui/settings.ui:746
+msgid "Select download folder"
+msgstr "Download-Ordner auswählen"
+
+#: resources/ui/settings.ui:765 resources/ui/settings.ui:774
+msgid "Delete files automatically"
+msgstr "Dateien automatisch löschen"
+
+#: resources/ui/settings.ui:814 resources/ui/settings.ui:821
+msgid "Delete all files"
+msgstr "Alle Dateien löschen"
+
+#: resources/ui/settings.ui:850
+msgid "Chats"
+msgstr "Chats"
+
+#: resources/ui/settings.ui:855 resources/ui/settings.ui:864
+msgid "Leave chats automatically"
+msgstr "Chats automatisch verlassen"
+
+#: resources/ui/settings.ui:904 resources/ui/settings.ui:911
+msgid "Leave all chats"
+msgstr "Alle Chats verlassen"
+
+#: src/event.c:513
+msgid "joined the chat"
+msgstr "ist dem Chat beigetreten"
+
+#: src/event.c:513
+msgid "left the chat"
+msgstr "hat den Chat verlassen"
+
+#: src/event.c:640
+#, c-format
+msgid "invited %s to a chat"
+msgstr "hat %s zum Chat eingeladen"
+
+#: src/event.c:644
+msgid "you"
+msgstr "dich"
+
+#: src/ui/chat.c:635
+msgid "Select file"
+msgstr "Datei auswählen"
+
+#: src/ui/chat.c:2126
+#, c-format
+msgid "%d members"
+msgstr "%d Mitglieder"
+
+#: src/ui/chat_entry.c:161
+msgid "Yesterday"
+msgstr "Gestern"
+
+#: src/ui/play_media.c:659
+msgid "Play Media"
+msgstr "Medium abspielen"
+
+#: src/ui/send_file.c:304
+msgid "Send File"
+msgstr "Datei senden"
diff --git a/po/en.po b/po/en.po
@@ -0,0 +1,465 @@
+# This file is part of GNUnet.
+# Copyright (C) 2024 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+# Tobias Frisch <>, 2024.
+#
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Project-Id-Version: unnamed project\n"
+"Last-Translator: Tobias Frisch <>\n"
+"Language-Team: English\n"
+"Language: en\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"PO-Revision-Date: 2024-04-01 22:18+0200\n"
+"X-Generator: Gtranslator 46.0\n"
+
+#: resources/ui/about.ui:32
+msgid ""
+"This application is part of GNUnet.\n"
+"Copyright (C) 2021--2024 GNUnet e.V."
+msgstr ""
+"This application is part of GNUnet.\n"
+"Copyright (C) 2021--2024 GNUnet e.V."
+
+#: resources/ui/about.ui:38
+msgid "Tobias Frisch"
+msgstr "Tobias Frisch"
+
+#: resources/ui/about.ui:71 resources/ui/accounts.ui:42
+#: resources/ui/contact_info.ui:55 resources/ui/contacts.ui:42
+#: resources/ui/invite_contact.ui:42
+msgid "Close"
+msgstr "Close"
+
+#: resources/ui/accounts.ui:27
+msgid "Accounts"
+msgstr "Accounts"
+
+#: resources/ui/accounts.ui:105 resources/ui/messenger.ui:367
+msgid "Add Account"
+msgstr "Add Account"
+
+#: resources/ui/chat.ui:721 resources/ui/contact_info.ui:188
+msgid "Reveal Identity"
+msgstr "Reveal Identity"
+
+#: resources/ui/chat.ui:771 resources/ui/contact_info.ui:237
+msgid "Block Contact"
+msgstr "Block Contact"
+
+#: resources/ui/chat.ui:817 resources/ui/contact_info.ui:281
+msgid "Unblock Contact"
+msgstr "Unblock Contact"
+
+#: resources/ui/chat.ui:871
+msgid "Leave Chat"
+msgstr "Leave Chat"
+
+#: resources/ui/chat.ui:910 resources/ui/settings.ui:176
+#: resources/ui/settings.ui:181
+msgid "Notifications"
+msgstr "Notifications"
+
+#: resources/ui/chat.ui:949 resources/ui/contacts.ui:27
+#: resources/ui/messenger.ui:574
+msgid "Contacts"
+msgstr "Contacts"
+
+#: resources/ui/chat.ui:998 resources/ui/invite_contact.ui:27
+msgid "Invite Contact"
+msgstr "Invite Contact"
+
+#: resources/ui/chat.ui:1038
+msgid "Media"
+msgstr "Media"
+
+#: resources/ui/chat.ui:1086 resources/ui/settings.ui:676
+msgid "Files"
+msgstr "Files"
+
+#: resources/ui/chat.ui:1169
+msgid "Send Later"
+msgstr "Send Later"
+
+#: resources/ui/chat.ui:1184
+msgid "Send Now"
+msgstr "Send Now"
+
+#: resources/ui/contact_info.ui:28
+msgid "Contact Information"
+msgstr "Contact Information"
+
+#: resources/ui/contact_info.ui:43
+msgid "Back"
+msgstr "Back"
+
+#: resources/ui/contact_info.ui:107 resources/ui/new_account.ui:103
+msgid "Name:"
+msgstr "Name:"
+
+#: resources/ui/contact_info.ui:333
+msgid "Open Private Chat"
+msgstr "Open Private Chat"
+
+#: resources/ui/contact_info.ui:405 resources/ui/new_contact.ui:271
+#: resources/ui/new_lobby.ui:354
+msgid "ID:"
+msgstr "ID:"
+
+#: resources/ui/contacts.ui:118
+msgid "Add Contact"
+msgstr "Add Contact"
+
+#: resources/ui/delete_messages.ui:14 resources/ui/new_lobby.ui:35
+#: resources/ui/settings.ui:35
+msgid "Off"
+msgstr "Off"
+
+#: resources/ui/delete_messages.ui:18 resources/ui/new_lobby.ui:39
+#: resources/ui/settings.ui:39
+msgid "4 weeks"
+msgstr "4 weeks"
+
+#: resources/ui/delete_messages.ui:22 resources/ui/new_lobby.ui:43
+#: resources/ui/settings.ui:43
+msgid "1 week"
+msgstr "1 week"
+
+#: resources/ui/delete_messages.ui:26 resources/ui/new_lobby.ui:47
+#: resources/ui/settings.ui:47
+msgid "1 day"
+msgstr "1 day"
+
+#: resources/ui/delete_messages.ui:30 resources/ui/new_lobby.ui:51
+#: resources/ui/settings.ui:51
+msgid "8 hours"
+msgstr "8 hours"
+
+#: resources/ui/delete_messages.ui:34 resources/ui/new_lobby.ui:55
+#: resources/ui/settings.ui:55
+msgid "1 hour"
+msgstr "1 hour"
+
+#: resources/ui/delete_messages.ui:38 resources/ui/new_lobby.ui:59
+#: resources/ui/settings.ui:59
+msgid "5 minutes"
+msgstr "5 minutes"
+
+#: resources/ui/delete_messages.ui:42 resources/ui/new_lobby.ui:63
+#: resources/ui/settings.ui:63
+msgid "30 seconds"
+msgstr "30 seconds"
+
+#: resources/ui/delete_messages.ui:49
+msgid "Delete Messages"
+msgstr "Delete Messages"
+
+#: resources/ui/delete_messages.ui:64 resources/ui/new_account.ui:43
+#: resources/ui/new_contact.ui:52 resources/ui/new_group.ui:43
+#: resources/ui/new_lobby.ui:86 resources/ui/new_platform.ui:43
+#: resources/ui/new_tag.ui:42 resources/ui/send_file.ui:41 src/ui/chat.c:638
+msgid "Cancel"
+msgstr "Cancel"
+
+#: resources/ui/delete_messages.ui:77 resources/ui/new_account.ui:56
+#: resources/ui/new_group.ui:81 resources/ui/new_platform.ui:56
+#: resources/ui/new_tag.ui:55 src/ui/chat.c:640
+msgid "Confirm"
+msgstr "Confirm"
+
+#: resources/ui/delete_messages.ui:108
+msgid "When do you want those messages to be deleted?"
+msgstr "When do you want those messages to be deleted?"
+
+#: resources/ui/delete_messages.ui:148
+msgid "Hide this dialog in the future"
+msgstr "Hide this dialog in the future"
+
+#: resources/ui/messenger.ui:430 resources/ui/new_contact.ui:35
+msgid "New Contact"
+msgstr "New Contact"
+
+#: resources/ui/messenger.ui:478 resources/ui/new_group.ui:28
+msgid "New Group"
+msgstr "New Group"
+
+#: resources/ui/messenger.ui:526 resources/ui/new_platform.ui:28
+msgid "New Platform"
+msgstr "New Platform"
+
+#: resources/ui/messenger.ui:622 resources/ui/settings.ui:70
+msgid "Settings"
+msgstr "Settings"
+
+#: resources/ui/messenger.ui:669
+msgid "About"
+msgstr "About"
+
+#: resources/ui/messenger.ui:782
+msgid "Select a chat to start messaging..."
+msgstr "Select a chat to start messaging..."
+
+#: resources/ui/messenger.ui:811
+msgid "Messenger"
+msgstr "Messenger"
+
+#: resources/ui/messenger.ui:812
+msgid "GNUnet"
+msgstr "GNUnet"
+
+#: resources/ui/new_account.ui:28
+msgid "New Account"
+msgstr "New Account"
+
+#: resources/ui/new_contact.ui:65
+msgid "Accept"
+msgstr "Accept"
+
+#: resources/ui/new_contact.ui:178
+msgid "Connection to camera failed!"
+msgstr "Connection to camera failed!"
+
+#: resources/ui/new_contact.ui:218
+msgid "No camera found!"
+msgstr "No camera found!"
+
+#: resources/ui/new_group.ui:56
+msgid "Previous"
+msgstr "Previous"
+
+#: resources/ui/new_group.ui:68
+msgid "Next"
+msgstr "Next"
+
+#: resources/ui/new_group.ui:131
+msgid "Group:"
+msgstr "Group:"
+
+#: resources/ui/new_lobby.ui:70
+msgid "New Lobby"
+msgstr "New Lobby"
+
+#: resources/ui/new_lobby.ui:99
+msgid "Generate"
+msgstr "Generate"
+
+#: resources/ui/new_lobby.ui:112
+msgid "Copy"
+msgstr "Copy"
+
+#: resources/ui/new_lobby.ui:166
+msgid ""
+"Please notice that everyone with access to the lobby's code can enter its "
+"chat!"
+msgstr ""
+"Please notice that everyone with access to the lobby's code can enter its "
+"chat!"
+
+#: resources/ui/new_lobby.ui:234
+msgid "Delay until new lobby expires:"
+msgstr "Delay until new lobby expires:"
+
+#: resources/ui/new_lobby.ui:304
+msgid "Generation of new lobby failed!"
+msgstr "Generation of new lobby failed!"
+
+#: resources/ui/new_platform.ui:103
+msgid "Platform:"
+msgstr "Platform:"
+
+#: resources/ui/new_tag.ui:102
+msgid "Tag:"
+msgstr "Tag:"
+
+#: resources/ui/picker.ui:389
+msgid "Emoji"
+msgstr "Emoji"
+
+#: resources/ui/picker.ui:409
+msgid "GIF"
+msgstr "GIF"
+
+#: resources/ui/picker.ui:430
+msgid "Stickers"
+msgstr "Stickers"
+
+#: resources/ui/play_media.ui:132
+msgid "Video source invalid!"
+msgstr "Video source invalid!"
+
+#: resources/ui/send_file.ui:54
+msgid "Send"
+msgstr "Send"
+
+#: resources/ui/settings.ui:79
+msgid "General"
+msgstr "General"
+
+#: resources/ui/settings.ui:84
+msgid "System"
+msgstr "System"
+
+#: resources/ui/settings.ui:89 resources/ui/settings.ui:98
+msgid "Start on login"
+msgstr "Start on login"
+
+#: resources/ui/settings.ui:130 resources/ui/settings.ui:139
+msgid "Run in background"
+msgstr "Run in background"
+
+#: resources/ui/settings.ui:186 resources/ui/settings.ui:195
+msgid "Enable notifications"
+msgstr "Enable notifications"
+
+#: resources/ui/settings.ui:227 resources/ui/settings.ui:236
+msgid "Play notification sounds"
+msgstr "Play notification sounds"
+
+#: resources/ui/settings.ui:274
+msgid "Privacy"
+msgstr "Privacy"
+
+#: resources/ui/settings.ui:279
+msgid "Blocked"
+msgstr "Blocked"
+
+#: resources/ui/settings.ui:294 src/ui/settings.c:387
+#, c-format
+msgid "%u blocked contacts"
+msgstr "%u blocked contacts"
+
+#: resources/ui/settings.ui:342
+msgid "Messaging"
+msgstr "Messaging"
+
+#: resources/ui/settings.ui:347 resources/ui/settings.ui:356
+msgid "Send read receipts"
+msgstr "Send read receipts"
+
+#: resources/ui/settings.ui:390
+msgid "Disappearing messages"
+msgstr "Disappearing messages"
+
+#: resources/ui/settings.ui:395 resources/ui/settings.ui:404
+msgid "Delete messages automatically"
+msgstr "Delete messages automatically"
+
+#: resources/ui/settings.ui:446
+msgid "History"
+msgstr "History"
+
+#: resources/ui/settings.ui:451 resources/ui/settings.ui:460
+msgid "Clear history automatically"
+msgstr "Clear history automatically"
+
+#: resources/ui/settings.ui:501 resources/ui/settings.ui:508
+msgid "Clear all history"
+msgstr "Clear all history"
+
+#: resources/ui/settings.ui:540
+msgid "Network"
+msgstr "Network"
+
+#: resources/ui/settings.ui:545
+msgid "Invitations"
+msgstr "Invitations"
+
+#: resources/ui/settings.ui:550 resources/ui/settings.ui:559
+msgid "Accept invitations automatically"
+msgstr "Accept invitations automatically"
+
+#: resources/ui/settings.ui:591 resources/ui/settings.ui:600
+msgid "Delete invitations automatically"
+msgstr "Delete invitations automatically"
+
+#: resources/ui/settings.ui:640 resources/ui/settings.ui:647
+msgid "Delete all invitations"
+msgstr "Delete all invitations"
+
+#: resources/ui/settings.ui:681 resources/ui/settings.ui:690
+msgid "Accept files automatically"
+msgstr "Accept files automatically"
+
+#: resources/ui/settings.ui:722 resources/ui/settings.ui:731
+msgid "Download folder"
+msgstr "Download folder"
+
+#: resources/ui/settings.ui:746
+msgid "Select download folder"
+msgstr "Select download folder"
+
+#: resources/ui/settings.ui:765 resources/ui/settings.ui:774
+msgid "Delete files automatically"
+msgstr "Delete files automatically"
+
+#: resources/ui/settings.ui:814 resources/ui/settings.ui:821
+msgid "Delete all files"
+msgstr "Delete all files"
+
+#: resources/ui/settings.ui:850
+msgid "Chats"
+msgstr "Chats"
+
+#: resources/ui/settings.ui:855 resources/ui/settings.ui:864
+msgid "Leave chats automatically"
+msgstr "Leave chats automatically"
+
+#: resources/ui/settings.ui:904 resources/ui/settings.ui:911
+msgid "Leave all chats"
+msgstr "Leave all chats"
+
+#: src/event.c:513
+msgid "joined the chat"
+msgstr "joined the chat"
+
+#: src/event.c:513
+msgid "left the chat"
+msgstr "left the chat"
+
+#: src/event.c:640
+#, c-format
+msgid "invited %s to a chat"
+msgstr "invited %s to a chat"
+
+#: src/event.c:644
+msgid "you"
+msgstr "you"
+
+#: src/ui/chat.c:635
+msgid "Select file"
+msgstr "Select file"
+
+#: src/ui/chat.c:2126
+#, c-format
+msgid "%d members"
+msgstr "%d members"
+
+#: src/ui/chat_entry.c:161
+msgid "Yesterday"
+msgstr "Yesterday"
+
+#: src/ui/play_media.c:659
+msgid "Play Media"
+msgstr "Play Media"
+
+#: src/ui/send_file.c:304
+msgid "Send File"
+msgstr "Send File"
diff --git a/po/meson.build b/po/meson.build
@@ -0,0 +1,29 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2024 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+domain_name = meson.project_name()
+locale_dir = get_option('prefix') / get_option('localedir')
+
+i18n = import('i18n')
+
+add_project_arguments('-DMESSENGER_APPLICATION_DOMAIN="' + domain_name + '"', language:'c')
+add_project_arguments('-DMESSENGER_APPLICATION_LOCALEDIR="' + locale_dir + '"', language:'c')
+
+i18n.gettext(meson.project_name())
diff --git a/po/messenger-gtk.pot b/po/messenger-gtk.pot
@@ -0,0 +1,462 @@
+# This file is part of GNUnet.
+# Copyright (C) 2024 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: messenger-gtk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-04-02 01:54+0200\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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 3.4.2\n"
+
+#: resources/ui/about.ui:32
+msgid ""
+"This application is part of GNUnet.\n"
+"Copyright (C) 2021--2024 GNUnet e.V."
+msgstr ""
+
+#: resources/ui/about.ui:38
+msgid "Tobias Frisch"
+msgstr ""
+
+#: resources/ui/about.ui:71 resources/ui/accounts.ui:42
+#: resources/ui/contact_info.ui:55 resources/ui/contacts.ui:42
+#: resources/ui/invite_contact.ui:42
+msgid "Close"
+msgstr ""
+
+#: resources/ui/accounts.ui:27
+msgid "Accounts"
+msgstr ""
+
+#: resources/ui/accounts.ui:105 resources/ui/messenger.ui:367
+msgid "Add Account"
+msgstr ""
+
+#: resources/ui/chat.ui:721 resources/ui/contact_info.ui:188
+msgid "Reveal Identity"
+msgstr ""
+
+#: resources/ui/chat.ui:771 resources/ui/contact_info.ui:237
+msgid "Block Contact"
+msgstr ""
+
+#: resources/ui/chat.ui:817 resources/ui/contact_info.ui:281
+msgid "Unblock Contact"
+msgstr ""
+
+#: resources/ui/chat.ui:871
+msgid "Leave Chat"
+msgstr ""
+
+#: resources/ui/chat.ui:910 resources/ui/settings.ui:176
+#: resources/ui/settings.ui:181
+msgid "Notifications"
+msgstr ""
+
+#: resources/ui/chat.ui:949 resources/ui/contacts.ui:27
+#: resources/ui/messenger.ui:574
+msgid "Contacts"
+msgstr ""
+
+#: resources/ui/chat.ui:998 resources/ui/invite_contact.ui:27
+msgid "Invite Contact"
+msgstr ""
+
+#: resources/ui/chat.ui:1038
+msgid "Media"
+msgstr ""
+
+#: resources/ui/chat.ui:1086 resources/ui/settings.ui:676
+msgid "Files"
+msgstr ""
+
+#: resources/ui/chat.ui:1169
+msgid "Send Later"
+msgstr ""
+
+#: resources/ui/chat.ui:1184
+msgid "Send Now"
+msgstr ""
+
+#: resources/ui/contact_info.ui:28
+msgid "Contact Information"
+msgstr ""
+
+#: resources/ui/contact_info.ui:43
+msgid "Back"
+msgstr ""
+
+#: resources/ui/contact_info.ui:107 resources/ui/new_account.ui:103
+msgid "Name:"
+msgstr ""
+
+#: resources/ui/contact_info.ui:333
+msgid "Open Private Chat"
+msgstr ""
+
+#: resources/ui/contact_info.ui:405 resources/ui/new_contact.ui:271
+#: resources/ui/new_lobby.ui:354
+msgid "ID:"
+msgstr ""
+
+#: resources/ui/contacts.ui:118
+msgid "Add Contact"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:14 resources/ui/new_lobby.ui:35
+#: resources/ui/settings.ui:35
+msgid "Off"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:18 resources/ui/new_lobby.ui:39
+#: resources/ui/settings.ui:39
+msgid "4 weeks"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:22 resources/ui/new_lobby.ui:43
+#: resources/ui/settings.ui:43
+msgid "1 week"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:26 resources/ui/new_lobby.ui:47
+#: resources/ui/settings.ui:47
+msgid "1 day"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:30 resources/ui/new_lobby.ui:51
+#: resources/ui/settings.ui:51
+msgid "8 hours"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:34 resources/ui/new_lobby.ui:55
+#: resources/ui/settings.ui:55
+msgid "1 hour"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:38 resources/ui/new_lobby.ui:59
+#: resources/ui/settings.ui:59
+msgid "5 minutes"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:42 resources/ui/new_lobby.ui:63
+#: resources/ui/settings.ui:63
+msgid "30 seconds"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:49
+msgid "Delete Messages"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:64 resources/ui/new_account.ui:43
+#: resources/ui/new_contact.ui:52 resources/ui/new_group.ui:43
+#: resources/ui/new_lobby.ui:86 resources/ui/new_platform.ui:43
+#: resources/ui/new_tag.ui:42 resources/ui/send_file.ui:41 src/ui/chat.c:638
+msgid "Cancel"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:77 resources/ui/new_account.ui:56
+#: resources/ui/new_group.ui:81 resources/ui/new_platform.ui:56
+#: resources/ui/new_tag.ui:55 src/ui/chat.c:640
+msgid "Confirm"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:108
+msgid "When do you want those messages to be deleted?"
+msgstr ""
+
+#: resources/ui/delete_messages.ui:148
+msgid "Hide this dialog in the future"
+msgstr ""
+
+#: resources/ui/messenger.ui:430 resources/ui/new_contact.ui:35
+msgid "New Contact"
+msgstr ""
+
+#: resources/ui/messenger.ui:478 resources/ui/new_group.ui:28
+msgid "New Group"
+msgstr ""
+
+#: resources/ui/messenger.ui:526 resources/ui/new_platform.ui:28
+msgid "New Platform"
+msgstr ""
+
+#: resources/ui/messenger.ui:622 resources/ui/settings.ui:70
+msgid "Settings"
+msgstr ""
+
+#: resources/ui/messenger.ui:669
+msgid "About"
+msgstr ""
+
+#: resources/ui/messenger.ui:782
+msgid "Select a chat to start messaging..."
+msgstr ""
+
+#: resources/ui/messenger.ui:811
+msgid "Messenger"
+msgstr ""
+
+#: resources/ui/messenger.ui:812
+msgid "GNUnet"
+msgstr ""
+
+#: resources/ui/new_account.ui:28
+msgid "New Account"
+msgstr ""
+
+#: resources/ui/new_contact.ui:65
+msgid "Accept"
+msgstr ""
+
+#: resources/ui/new_contact.ui:178
+msgid "Connection to camera failed!"
+msgstr ""
+
+#: resources/ui/new_contact.ui:218
+msgid "No camera found!"
+msgstr ""
+
+#: resources/ui/new_group.ui:56
+msgid "Previous"
+msgstr ""
+
+#: resources/ui/new_group.ui:68
+msgid "Next"
+msgstr ""
+
+#: resources/ui/new_group.ui:131
+msgid "Group:"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:70
+msgid "New Lobby"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:99
+msgid "Generate"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:112
+msgid "Copy"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:166
+msgid ""
+"Please notice that everyone with access to the lobby's code can enter its "
+"chat!"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:234
+msgid "Delay until new lobby expires:"
+msgstr ""
+
+#: resources/ui/new_lobby.ui:304
+msgid "Generation of new lobby failed!"
+msgstr ""
+
+#: resources/ui/new_platform.ui:103
+msgid "Platform:"
+msgstr ""
+
+#: resources/ui/new_tag.ui:102
+msgid "Tag:"
+msgstr ""
+
+#: resources/ui/picker.ui:389
+msgid "Emoji"
+msgstr ""
+
+#: resources/ui/picker.ui:409
+msgid "GIF"
+msgstr ""
+
+#: resources/ui/picker.ui:430
+msgid "Stickers"
+msgstr ""
+
+#: resources/ui/play_media.ui:132
+msgid "Video source invalid!"
+msgstr ""
+
+#: resources/ui/send_file.ui:54
+msgid "Send"
+msgstr ""
+
+#: resources/ui/settings.ui:79
+msgid "General"
+msgstr ""
+
+#: resources/ui/settings.ui:84
+msgid "System"
+msgstr ""
+
+#: resources/ui/settings.ui:89 resources/ui/settings.ui:98
+msgid "Start on login"
+msgstr ""
+
+#: resources/ui/settings.ui:130 resources/ui/settings.ui:139
+msgid "Run in background"
+msgstr ""
+
+#: resources/ui/settings.ui:186 resources/ui/settings.ui:195
+msgid "Enable notifications"
+msgstr ""
+
+#: resources/ui/settings.ui:227 resources/ui/settings.ui:236
+msgid "Play notification sounds"
+msgstr ""
+
+#: resources/ui/settings.ui:274
+msgid "Privacy"
+msgstr ""
+
+#: resources/ui/settings.ui:279
+msgid "Blocked"
+msgstr ""
+
+#: resources/ui/settings.ui:294 src/ui/settings.c:387
+#, c-format
+msgid "%u blocked contacts"
+msgstr ""
+
+#: resources/ui/settings.ui:342
+msgid "Messaging"
+msgstr ""
+
+#: resources/ui/settings.ui:347 resources/ui/settings.ui:356
+msgid "Send read receipts"
+msgstr ""
+
+#: resources/ui/settings.ui:390
+msgid "Disappearing messages"
+msgstr ""
+
+#: resources/ui/settings.ui:395 resources/ui/settings.ui:404
+msgid "Delete messages automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:446
+msgid "History"
+msgstr ""
+
+#: resources/ui/settings.ui:451 resources/ui/settings.ui:460
+msgid "Clear history automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:501 resources/ui/settings.ui:508
+msgid "Clear all history"
+msgstr ""
+
+#: resources/ui/settings.ui:540
+msgid "Network"
+msgstr ""
+
+#: resources/ui/settings.ui:545
+msgid "Invitations"
+msgstr ""
+
+#: resources/ui/settings.ui:550 resources/ui/settings.ui:559
+msgid "Accept invitations automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:591 resources/ui/settings.ui:600
+msgid "Delete invitations automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:640 resources/ui/settings.ui:647
+msgid "Delete all invitations"
+msgstr ""
+
+#: resources/ui/settings.ui:681 resources/ui/settings.ui:690
+msgid "Accept files automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:722 resources/ui/settings.ui:731
+msgid "Download folder"
+msgstr ""
+
+#: resources/ui/settings.ui:746
+msgid "Select download folder"
+msgstr ""
+
+#: resources/ui/settings.ui:765 resources/ui/settings.ui:774
+msgid "Delete files automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:814 resources/ui/settings.ui:821
+msgid "Delete all files"
+msgstr ""
+
+#: resources/ui/settings.ui:850
+msgid "Chats"
+msgstr ""
+
+#: resources/ui/settings.ui:855 resources/ui/settings.ui:864
+msgid "Leave chats automatically"
+msgstr ""
+
+#: resources/ui/settings.ui:904 resources/ui/settings.ui:911
+msgid "Leave all chats"
+msgstr ""
+
+#: src/event.c:513
+msgid "joined the chat"
+msgstr ""
+
+#: src/event.c:513
+msgid "left the chat"
+msgstr ""
+
+#: src/event.c:640
+#, c-format
+msgid "invited %s to a chat"
+msgstr ""
+
+#: src/event.c:644
+msgid "you"
+msgstr ""
+
+#: src/ui/chat.c:635
+msgid "Select file"
+msgstr ""
+
+#: src/ui/chat.c:2126
+#, c-format
+msgid "%d members"
+msgstr ""
+
+#: src/ui/chat_entry.c:161
+msgid "Yesterday"
+msgstr ""
+
+#: src/ui/play_media.c:659
+msgid "Play Media"
+msgstr ""
+
+#: src/ui/send_file.c:304
+msgid "Send File"
+msgstr ""
diff --git a/resources/css/style.css b/resources/css/style.css
@@ -1,3 +1,22 @@
+/*
+ This file is part of GNUnet.
+ Copyright (C) 2021--2024 GNUnet e.V.
+
+ GNUnet is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
+ */
.flap-background {
background-color: @theme_bg_color;
@@ -15,7 +34,7 @@
font-size: 10px;
}
-.account-entry {
+.account-entry, .profile-entry {
padding: 4px 20px;
}
diff --git a/resources/ui/new_tag.ui b/resources/ui/new_tag.ui
@@ -25,6 +25,7 @@ Author: Tobias Frisch
<requires lib="libhandy" version="1.2"/>
<object class="GtkDialog" id="new_tag_dialog">
<property name="can-focus">False</property>
+ <property name="title" translatable="yes">New Tag</property>
<property name="modal">True</property>
<property name="window-position">center-on-parent</property>
<property name="type-hint">dialog</property>
diff --git a/src/application.c b/src/application.c
@@ -249,6 +249,11 @@ application_init(MESSENGER_Application *app,
app->argc = argc;
app->argv = argv;
+ setlocale(LC_ALL, "");
+ bindtextdomain(MESSENGER_APPLICATION_DOMAIN, MESSENGER_APPLICATION_LOCALEDIR);
+ bind_textdomain_codeset(MESSENGER_APPLICATION_DOMAIN, "UTF-8");
+ textdomain(MESSENGER_APPLICATION_DOMAIN);
+
pw_init(&argc, &argv);
gst_init(&argc, &argv);
gtk_init(&argc, &argv);
diff --git a/src/file.c b/src/file.c
@@ -210,10 +210,13 @@ file_draw_preview(MESSENGER_FileInfo* info)
while (list)
{
- GtkWidget *widget = GTK_WIDGET(list->data);
+ if (!GTK_IS_WIDGET(list->data))
+ goto skip_data;
+ GtkWidget *widget = GTK_WIDGET(list->data);
gtk_widget_queue_draw(widget);
+ skip_data:
list = list->next;
}
}
diff --git a/src/ui.c b/src/ui.c
@@ -26,6 +26,25 @@
#include <gnunet/gnunet_common.h>
+GtkBuilder*
+ui_builder_from_resource(const char *resource_path)
+{
+ GtkBuilder *builder = gtk_builder_new();
+
+ if (!builder)
+ return NULL;
+
+ gtk_builder_set_translation_domain(builder, MESSENGER_APPLICATION_DOMAIN);
+
+ if (!gtk_builder_add_from_resource(builder, resource_path, NULL))
+ {
+ g_object_unref(builder);
+ return NULL;
+ }
+
+ return builder;
+}
+
void
ui_label_set_text(GtkLabel *label, const char *text)
{
diff --git a/src/ui.h b/src/ui.h
@@ -30,6 +30,16 @@
#include <stdint.h>
/**
+ * Returns a new builder instance using the UI
+ * definitions from a given resource path.
+ *
+ * @param resource_path Resource path
+ * @return New builder
+ */
+GtkBuilder*
+ui_builder_from_resource(const char *resource_path);
+
+/**
* Sets the text of a GtkLabel applying automatic utf8
* conversion.
*
diff --git a/src/ui/about.c b/src/ui/about.c
@@ -25,6 +25,7 @@
#include "about.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_close_button_click(UNUSED GtkButton *button,
@@ -51,7 +52,7 @@ ui_about_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/about.ui")
);
diff --git a/src/ui/account_entry.c b/src/ui/account_entry.c
@@ -34,7 +34,7 @@ ui_account_entry_new(MESSENGER_Application *app)
UI_ACCOUNT_ENTRY_Handle* handle = g_malloc(sizeof(UI_ACCOUNT_ENTRY_Handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/account_entry.ui")
);
diff --git a/src/ui/accounts.c b/src/ui/accounts.c
@@ -26,6 +26,7 @@
#include "account_entry.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_close_button_click(UNUSED GtkButton *button,
@@ -156,7 +157,7 @@ ui_accounts_dialog_init(MESSENGER_Application *app,
handle->show_queued = 0;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/accounts.ui")
);
diff --git a/src/ui/chat.c b/src/ui/chat.c
@@ -1363,7 +1363,7 @@ ui_chat_new(MESSENGER_Application *app)
handle->loads = NULL;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/chat.ui")
);
diff --git a/src/ui/chat_entry.c b/src/ui/chat_entry.c
@@ -43,7 +43,7 @@ ui_chat_entry_new(MESSENGER_Application *app)
handle->timestamp = GNUNET_TIME_absolute_get_zero_();
handle->chat = ui_chat_new(app);
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/chat_entry.ui")
);
diff --git a/src/ui/contact_entry.c b/src/ui/contact_entry.c
@@ -34,7 +34,7 @@ ui_contact_entry_new(MESSENGER_Application *app)
UI_CONTACT_ENTRY_Handle* handle = g_malloc(sizeof(UI_CONTACT_ENTRY_Handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/contact_entry.ui")
);
diff --git a/src/ui/contact_info.c b/src/ui/contact_info.c
@@ -359,7 +359,7 @@ ui_contact_info_dialog_init(MESSENGER_Application *app,
handle->app = app;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/contact_info.ui")
);
diff --git a/src/ui/contacts.c b/src/ui/contacts.c
@@ -26,6 +26,7 @@
#include "contact_entry.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_close_button_click(UNUSED GtkButton *button,
@@ -182,7 +183,7 @@ ui_contacts_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/contacts.ui")
);
diff --git a/src/ui/delete_messages.c b/src/ui/delete_messages.c
@@ -25,6 +25,7 @@
#include "delete_messages.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_cancel_button_click(UNUSED GtkButton *button,
@@ -88,7 +89,7 @@ ui_delete_messages_dialog_init(MESSENGER_Application *app,
handle->selected = NULL;
handle->callback = NULL;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/delete_messages.ui")
);
diff --git a/src/ui/file_entry.c b/src/ui/file_entry.c
@@ -36,7 +36,7 @@ ui_file_entry_new(MESSENGER_Application *app)
UI_FILE_ENTRY_Handle* handle = g_malloc(sizeof(UI_FILE_ENTRY_Handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/file_entry.ui")
);
diff --git a/src/ui/file_load_entry.c b/src/ui/file_load_entry.c
@@ -25,6 +25,7 @@
#include "file_load_entry.h"
#include "../application.h"
+#include "../ui.h"
#include "chat.h"
@@ -51,7 +52,7 @@ ui_file_load_entry_new(MESSENGER_Application *app)
handle->chat = NULL;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/file_load_entry.ui")
);
diff --git a/src/ui/invite_contact.c b/src/ui/invite_contact.c
@@ -26,6 +26,7 @@
#include "contact_entry.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_close_button_click(UNUSED GtkButton *button,
@@ -172,7 +173,7 @@ ui_invite_contact_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/invite_contact.ui")
);
diff --git a/src/ui/media_preview.c b/src/ui/media_preview.c
@@ -26,6 +26,7 @@
#include "../application.h"
#include "../file.h"
+#include "../ui.h"
static gboolean
handle_preview_drawing_area_draw(GtkWidget* drawing_area,
@@ -116,7 +117,7 @@ ui_media_preview_new(MESSENGER_Application *app)
UI_MEDIA_PREVIEW_Handle* handle = g_malloc(sizeof(UI_MEDIA_PREVIEW_Handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/media_preview.ui")
);
diff --git a/src/ui/message.c b/src/ui/message.c
@@ -258,7 +258,7 @@ ui_message_new(MESSENGER_Application *app,
break;
}
- handle->builder[0] = gtk_builder_new_from_resource(
+ handle->builder[0] = ui_builder_from_resource(
application_get_resource_path(app, ui_builder_file)
);
@@ -313,7 +313,7 @@ ui_message_new(MESSENGER_Application *app,
gtk_builder_get_object(handle->builder[0], "tag_flow_box")
);
- handle->builder[1] = gtk_builder_new_from_resource(
+ handle->builder[1] = ui_builder_from_resource(
application_get_resource_path(app, "ui/message_content.ui")
);
diff --git a/src/ui/messenger.c b/src/ui/messenger.c
@@ -384,7 +384,7 @@ ui_messenger_init(MESSENGER_Application *app,
memset(handle, 0, sizeof(*handle));
handle->app = app;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/messenger.ui")
);
diff --git a/src/ui/new_account.c b/src/ui/new_account.c
@@ -25,6 +25,7 @@
#include "new_account.h"
#include "../application.h"
+#include "../ui.h"
static gboolean
_show_messenger_main_window(gpointer user_data)
@@ -134,7 +135,7 @@ ui_new_account_dialog_init(MESSENGER_Application *app,
handle->show_queued = 0;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_account.ui")
);
diff --git a/src/ui/new_contact.c b/src/ui/new_contact.c
@@ -26,6 +26,7 @@
#include "../application.h"
#include "../request.h"
+#include "../ui.h"
#include <pipewire/pipewire.h>
@@ -432,7 +433,7 @@ ui_new_contact_dialog_init(MESSENGER_Application *app,
_setup_gst_pipeline(handle);
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_contact.ui")
);
diff --git a/src/ui/new_group.c b/src/ui/new_group.c
@@ -26,6 +26,7 @@
#include "contact_entry.h"
#include "../application.h"
+#include "../ui.h"
static void
_open_new_group(GtkEntry *entry,
@@ -213,7 +214,7 @@ ui_new_group_dialog_init(MESSENGER_Application *app,
handle->contact_entries = NULL;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_group.ui")
);
diff --git a/src/ui/new_lobby.c b/src/ui/new_lobby.c
@@ -25,6 +25,7 @@
#include "new_lobby.h"
#include "../application.h"
+#include "../ui.h"
static void
handle_warning_info_bar_close(GtkInfoBar *info_bar,
@@ -289,7 +290,7 @@ ui_new_lobby_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_lobby.ui")
);
diff --git a/src/ui/new_platform.c b/src/ui/new_platform.c
@@ -25,6 +25,7 @@
#include "new_platform.h"
#include "../application.h"
+#include "../ui.h"
static void
_open_new_platform(GtkEntry *entry,
@@ -119,7 +120,7 @@ ui_new_platform_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_platform.ui")
);
diff --git a/src/ui/new_tag.c b/src/ui/new_tag.c
@@ -122,7 +122,7 @@ ui_new_tag_dialog_init(MESSENGER_Application *app,
handle->user_data = NULL;
handle->callback = NULL;
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/new_tag.ui")
);
diff --git a/src/ui/picker.c b/src/ui/picker.c
@@ -25,6 +25,7 @@
#include "picker.h"
#include "../application.h"
+#include "../ui.h"
#include <emoji.h>
#include <glib-2.0/glib.h>
@@ -257,7 +258,7 @@ ui_picker_new(MESSENGER_Application *app,
UI_PICKER_Handle *handle = g_malloc(sizeof(UI_PICKER_Handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/picker.ui")
);
diff --git a/src/ui/play_media.c b/src/ui/play_media.c
@@ -630,7 +630,7 @@ ui_play_media_window_init(MESSENGER_Application *app,
handle->parent = GTK_WINDOW(app->ui.messenger.main_window);
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/play_media.ui")
);
diff --git a/src/ui/send_file.c b/src/ui/send_file.c
@@ -30,6 +30,7 @@
#include "../application.h"
#include "../file.h"
+#include "../ui.h"
static void
handle_cancel_button_click(UNUSED GtkButton *button,
@@ -291,7 +292,7 @@ ui_send_file_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/send_file.ui")
);
diff --git a/src/ui/settings.c b/src/ui/settings.c
@@ -26,6 +26,7 @@
#include "../application.h"
#include "../request.h"
+#include "../ui.h"
#include "contact_entry.h"
@@ -269,7 +270,7 @@ ui_settings_dialog_init(MESSENGER_Application *app,
{
g_assert((app) && (handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/settings.ui")
);
diff --git a/src/ui/tag.c b/src/ui/tag.c
@@ -36,7 +36,7 @@ ui_tag_new(MESSENGER_Application *app)
memset(handle, 0, sizeof(*handle));
- handle->builder = gtk_builder_new_from_resource(
+ handle->builder = ui_builder_from_resource(
application_get_resource_path(app, "ui/tag.ui")
);
diff --git a/src/util.h b/src/util.h
@@ -29,11 +29,11 @@
#define UNUSED __attribute__((unused))
-#define _(String) ( \
- (const gchar*) g_dgettext( \
- MESSENGER_APPLICATION_ID, \
- (const gchar*) String \
- ) \
+#define _(String) ( \
+ (const gchar*) g_dgettext( \
+ MESSENGER_APPLICATION_DOMAIN, \
+ (const gchar*) String \
+ ) \
)
#endif /* UTIL_H_ */