feat(core,gui): gettext translations and language preference

The app, the tray and the search prompt route every user-visible string
through GNU gettext in the `pdfs` text domain, with named placeholders and
plural forms. po/ holds the template, update and build scripts, and catalogs
for de, en_GB, es, fr, it, nl, pl and pt_BR. Preferences gains a Language row
that overrides the system language from the next start (config `language`).

Packages compile the catalogs into /usr/share/locale and the desktop files
carry translated descriptions and keywords. docs/TRANSLATING.md describes
the workflow.
This commit is contained in:
nvrl committed 2026-09-23 08:07:50 +02:00
1 parent 66ab1f5b16
commit d9064ef880
52 files changed
+45287 -1569

No files matched your search

+4 -1
View File
@@ -16,7 +16,7 @@ arch=('x86_64')
url="https://github.com/narrrl/proton-drive-linux"
license=('MIT')
depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'perl-image-exiftool')
makedepends=('cargo' 'git')
makedepends=('cargo' 'git' 'gettext')
provides=('pdfs')
# Files-on-demand mount + keyring need these at runtime.
optdepends=('gnome-keyring: credential storage via Secret Service'
@@ -73,5 +73,8 @@ package() {
install -Dm644 "packaging/proton-drive.service" \
"$pkgdir/usr/lib/systemd/user/proton-drive.service"
# Translations: compiled from po/ into /usr/share/locale.
po/build.sh "$pkgdir/usr/share/locale"
install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
@@ -53,5 +53,9 @@ package() {
install -Dm644 "$srcdir/proton-drive.service" \
"$pkgdir/usr/lib/systemd/user/proton-drive.service"
# Translations ship precompiled in the release tarball.
install -dm755 "$pkgdir/usr/share"
cp -r --no-preserve=ownership "$srcdir/locale" "$pkgdir/usr/share/locale"
install -Dm644 "$srcdir/LICENSE-$pkgver" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
@@ -9,7 +9,7 @@ url="https://github.com/narrrl/proton-drive-linux"
license=('MIT')
depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc'
'hicolor-icon-theme')
makedepends=('cargo' 'git')
makedepends=('cargo' 'git' 'gettext')
optdepends=('perl-image-exiftool: thumbnails for camera RAW files'
'gnome-keyring: credential storage over the Secret Service API'
'kwallet: credential storage over the Secret Service API'
@@ -73,6 +73,9 @@ package() {
install -Dm644 packaging/proton-drive.service \
"$pkgdir/usr/lib/systemd/user/proton-drive.service"
# Translations: compiled from po/ into /usr/share/locale.
po/build.sh "$pkgdir/usr/share/locale"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
}
@@ -9,7 +9,7 @@ url="https://github.com/narrrl/proton-drive-linux"
license=('MIT')
depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc'
'hicolor-icon-theme')
makedepends=('cargo')
makedepends=('cargo' 'gettext')
optdepends=('perl-image-exiftool: thumbnails for camera RAW files'
'gnome-keyring: credential storage over the Secret Service API'
'kwallet: credential storage over the Secret Service API'
@@ -68,6 +68,9 @@ package() {
install -Dm644 packaging/proton-drive.service \
"$pkgdir/usr/lib/systemd/user/proton-drive.service"
# Translations: compiled from po/ into /usr/share/locale.
po/build.sh "$pkgdir/usr/share/locale"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
}
@@ -2,7 +2,23 @@
Type=Application
Name=Proton Drive for Linux (Tray)
GenericName=Cloud Drive Tray
GenericName[de]=Cloud-Speicher im Infobereich
GenericName[en_GB]=Cloud Drive Tray
GenericName[es]=Bandeja de almacenamiento en la nube
GenericName[fr]=Zone de notification du stockage en ligne
GenericName[it]=Area di notifica archiviazione cloud
GenericName[nl]=Cloudopslag in systeemvak
GenericName[pl]=Dysk w chmurze w zasobniku
GenericName[pt_BR]=Bandeja de armazenamento em nuvem
Comment=Proton Drive status and quick actions (unofficial client)
Comment[de]=Status und Schnellaktionen für Proton Drive (inoffizieller Client)
Comment[en_GB]=Proton Drive status and quick actions (unofficial client)
Comment[es]=Estado y acciones rápidas de Proton Drive (cliente no oficial)
Comment[fr]=État et actions rapides de Proton Drive (client non officiel)
Comment[it]=Stato e azioni rapide di Proton Drive (client non ufficiale)
Comment[nl]=Status en snelle acties voor Proton Drive (onofficiële client)
Comment[pl]=Stan i szybkie działania Proton Drive (nieoficjalny klient)
Comment[pt_BR]=Status e ações rápidas do Proton Drive (cliente não oficial)
Exec=pdfs-tray
Icon=io.narl.proton-drive-linux
Terminal=false
@@ -2,11 +2,35 @@
Type=Application
Name=Proton Drive for Linux
GenericName=Cloud Drive
GenericName[de]=Cloud-Speicher
GenericName[en_GB]=Cloud Drive
GenericName[es]=Almacenamiento en la nube
GenericName[fr]=Stockage en ligne
GenericName[it]=Archiviazione cloud
GenericName[nl]=Cloudopslag
GenericName[pl]=Dysk w chmurze
GenericName[pt_BR]=Armazenamento em nuvem
Comment=Files-on-demand Proton Drive (unofficial client)
Comment[de]=Proton Drive mit Dateien auf Abruf (inoffizieller Client)
Comment[en_GB]=Files-on-demand Proton Drive (unofficial client)
Comment[es]=Proton Drive con archivos bajo demanda (cliente no oficial)
Comment[fr]=Proton Drive avec fichiers à la demande (client non officiel)
Comment[it]=Proton Drive con file su richiesta (client non ufficiale)
Comment[nl]=Proton Drive met bestanden op aanvraag (onofficiële client)
Comment[pl]=Proton Drive z plikami na żądanie (nieoficjalny klient)
Comment[pt_BR]=Proton Drive com arquivos sob demanda (cliente não oficial)
Exec=pdfs-app
Icon=io.narl.proton-drive-linux
Terminal=false
Categories=Network;FileTransfer;GTK;
Keywords=proton;drive;cloud;sync;storage;files;backup;
Keywords[de]=proton;drive;cloud;sync;speicher;dateien;sicherung;synchronisation;
Keywords[en_GB]=proton;drive;cloud;sync;storage;files;backup;
Keywords[es]=proton;drive;nube;sincronizar;almacenamiento;archivos;copia de seguridad;
Keywords[fr]=proton;drive;cloud;nuage;synchronisation;stockage;fichiers;sauvegarde;
Keywords[it]=proton;drive;cloud;sincronizzazione;archiviazione;file;backup;
Keywords[nl]=proton;drive;cloud;synchronisatie;opslag;bestanden;back-up;
Keywords[pl]=proton;drive;chmura;synchronizacja;dysk;pliki;kopia zapasowa;
Keywords[pt_BR]=proton;drive;nuvem;sincronização;armazenamento;arquivos;backup;
StartupNotify=true
SingleMainWindow=true
+3
View File
@@ -27,6 +27,7 @@ BuildRequires: libsecret-devel
BuildRequires: dbus-devel
BuildRequires: glib2-devel
BuildRequires: webkitgtk6.0-devel
BuildRequires: gettext
Requires: fuse3
Requires: gtk4
@@ -80,6 +81,7 @@ install -D -m0644 %{git_dir}/packaging/io.narl.proton-drive-linux.svg \
%{buildroot}%{_datadir}/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg
install -D -m0644 %{git_dir}/packaging/proton-drive.service \
%{buildroot}/usr/lib/systemd/user/proton-drive.service
%{git_dir}/po/build.sh %{buildroot}%{_datadir}/locale
%files
%license LICENSE
@@ -91,6 +93,7 @@ install -D -m0644 %{git_dir}/packaging/proton-drive.service \
%{_sysconfdir}/xdg/autostart/io.narl.proton-drive-linux-tray.desktop
%{_datadir}/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg
/usr/lib/systemd/user/proton-drive.service
%{_datadir}/locale/*/LC_MESSAGES/pdfs.mo
%changelog
* Sun Jul 19 2026 Local Packager - 0.4.0-1