Catalogo .qm nel data dir dell'app (/usr/share/harbour-calibreweb/translations) e caricamento esplicito in main.cpp con risoluzione lingua system via QLocale — il validatore RPM rifiuta /usr/share/translations

This commit is contained in:
2026-08-19 16:30:53 +02:00
parent d8584f2de4
commit 8b7af5c5e0
2 changed files with 21 additions and 10 deletions
+8 -5
View File
@@ -26,7 +26,9 @@ in locale.
%changelog
* Wed Aug 19 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.2.0-1
- Selettore lingua nelle impostazioni (System/English/Italiano, applicata al
riavvio; QTranslator in main.cpp, pattern quill)
riavvio; QTranslator in main.cpp, pattern quill). Catalogo .qm nel data dir
dell'app (/usr/share/harbour-calibreweb/translations, il validatore RPM
rifiuta /usr/share/translations)
- Fix 'Close book': pop fino alla prima pagina (popTo(null) non affidabile)
- Localizzazione: lingua di default inglese (qsTr ovunque), catalogo
italiano harbour-calibreweb_it.ts/.qm installato in /usr/share/translations
@@ -73,9 +75,10 @@ mkdir -p %{buildroot}%{_datadir}/applications
install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/applications/%{name}.desktop
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop || true
# Italian translation: installed from the spec, like the desktop file.
mkdir -p %{buildroot}/usr/share/translations
install -m 0644 %{_builddir}/%{name}_it.qm %{buildroot}/usr/share/translations/
# Italian translation: installed in the app data dir (the RPM validator
# rejects /usr/share/translations); main.cpp loads it from there.
mkdir -p %{buildroot}%{_datadir}/%{name}/translations
install -m 0644 %{_builddir}/%{name}_it.qm %{buildroot}%{_datadir}/%{name}/translations/
%files
%defattr(-,root,root,-)
@@ -84,4 +87,4 @@ install -m 0644 %{_builddir}/%{name}_it.qm %{buildroot}/usr/share/translations/
%{_datadir}/icons/hicolor/86x86/apps/%{name}.png
%{_datadir}/icons/hicolor/108x108/apps/%{name}.png
%{_datadir}/%{name}/qml
/usr/share/translations/%{name}*.qm
%{_datadir}/%{name}/translations/%{name}*.qm
+13 -5
View File
@@ -1,5 +1,6 @@
#include <QDebug>
#include <QGuiApplication>
#include <QLocale>
#include <QQuickView>
#include <QQmlContext>
#include <QTranslator>
@@ -16,10 +17,17 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
Settings settings;
// User-chosen language (Settings -> Language). "system" = Sailfish UI
// language (libsailfishapp already installed its translator). "en" =
// force English (remove all translators). "it" = force Italian.
const QString lang = settings.language();
// User-chosen language (Settings -> Language). "system" = follow the
// Sailfish UI language. "en" = force English. "it" = force Italian.
// The .qm lives in the app data dir (the RPM validator rejects
// /usr/share/translations), so libsailfishapp's auto-load cannot be
// used: resolve the language here and install our own translator.
QString lang = settings.language();
if (lang == "system") {
const QString sys = QLocale::system().name();
lang = sys.startsWith(QLatin1String("it")) ? QStringLiteral("it")
: QStringLiteral("en");
}
if (lang == "en" || lang == "it") {
const QList<QTranslator *> trs = app->findChildren<QTranslator *>();
foreach (QTranslator *t, trs) {
@@ -29,7 +37,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
if (lang == "it") {
QTranslator *translator = new QTranslator(app);
if (translator->load(QStringLiteral("harbour-calibreweb_it"),
QStringLiteral("/usr/share/translations"))) {
QStringLiteral("/usr/share/harbour-calibreweb/translations"))) {
app->installTranslator(translator);
} else {
qWarning() << "harbour-calibreweb: cannot load harbour-calibreweb_it.qm";