feat(i18n): localizzazione interfaccia — italiano, francese, tedesco (v0.4.0)
- translations/: harbour-hermes-it/fr/de.ts (78 stringhe ciascuna, 100% tradotte) + caricamento in main.cpp in base alla lingua di sistema - .pro: CONFIG += sailfishapp_i18n + TRANSLATIONS (pattern ufficiale Sailfish: .qm generati in build e installati in /usr/share/harbour-hermes/translations) - stringhe visibili del core in tr(): ApiClient, ChatModel, Recorder (VoiceRecorder era gia' ok); plurali dei messaggi corretti (1 message / %1 messages) in SessionsPage e CoverPage - spec: BuildRequires qt5-qttools-linguist + %files translations - README/BUILD: sezione Localization + workflow lupdate/lrelease Verificato: lupdate 78/78 per it/fr/de, lrelease OK, e test runtime di caricamento .qm (tutte le traduzioni risolte nei contesti corretti).
This commit is contained in:
@@ -14,6 +14,8 @@ chat with your Hermes agent from the phone — and use it with your **voice**.
|
||||
QMediaPlayer; optional auto-read of every completed reply
|
||||
- **Voice dialog (hands-free)**: continuous listen → transcribe → send →
|
||||
read-aloud loop, auto-stopping on speech pauses (tunable)
|
||||
- **Localized UI**: English (source), Italian, French and German — follows
|
||||
the system language
|
||||
- Cancel a running turn, resync from server state, cover page
|
||||
|
||||
## Requirements
|
||||
@@ -47,6 +49,22 @@ requires a server address.
|
||||
> pick another one, leave the voice empty (server default), or add your
|
||||
> language's voices to your own `hermes-webui`.
|
||||
|
||||
## Localization
|
||||
|
||||
The UI follows the system language: English is the source language, and
|
||||
Italian, French and German translations live in `translations/*.ts`. At build
|
||||
time (`sailfishapp_i18n`) the `.qm` files are generated and installed to
|
||||
`/usr/share/harbour-hermes/translations`, where the app loads them on startup.
|
||||
After changing UI strings:
|
||||
|
||||
```bash
|
||||
lupdate -no-obsolete -recursive src qml \
|
||||
-ts translations/harbour-hermes-it.ts \
|
||||
translations/harbour-hermes-fr.ts \
|
||||
translations/harbour-hermes-de.ts
|
||||
# then edit the .ts files and rebuild
|
||||
```
|
||||
|
||||
## Build
|
||||
|
||||
See [docs/BUILD.md](docs/BUILD.md) (Sailfish SDK, `sfdk build` / `sfdk deploy`)
|
||||
@@ -55,6 +73,6 @@ speaks (validated live against a real instance).
|
||||
|
||||
## Status
|
||||
|
||||
Version 0.3.2 — protocol and C++ core validated against a real `hermes-webui`
|
||||
(login, sessions, streaming chat, TTS, STT, voice dialog); on-device testing
|
||||
still ongoing.
|
||||
Version 0.4.0 — protocol and C++ core validated against a real `hermes-webui`
|
||||
(login, sessions, streaming chat, TTS, STT, voice dialog); UI in English,
|
||||
Italian, French and German; on-device testing still ongoing.
|
||||
|
||||
+16
-3
@@ -76,14 +76,27 @@ richiede il probe WebUI su :8899). Esito 12/09/2026: unit 9/9, live completo OK.
|
||||
|
||||
```bash
|
||||
cd ~/workspace
|
||||
tar czf harbour-hermes-0.3.2.tar.gz \
|
||||
--transform 's,^harbour-hermes,harbour-hermes-0.3.2,' \
|
||||
tar czf harbour-hermes-0.4.0.tar.gz \
|
||||
--transform 's,^harbour-hermes,harbour-hermes-0.4.0,' \
|
||||
--exclude='.git' harbour-hermes
|
||||
```
|
||||
|
||||
Lo spec si aspetta la directory `harbour-hermes-0.3.2/` (pattern degli altri
|
||||
Lo spec si aspetta la directory `harbour-hermes-0.4.0/` (pattern degli altri
|
||||
progetti: cercato in modo robusto anche per i sorgenti live di sfdk).
|
||||
|
||||
## Traduzioni
|
||||
|
||||
Stringhe UI in `qsTr()` (QML) e `tr()` (C++). Dopo modifiche alle stringhe:
|
||||
|
||||
```bash
|
||||
lupdate -no-obsolete -recursive src qml -ts translations/harbour-hermes-it.ts \
|
||||
translations/harbour-hermes-fr.ts translations/harbour-hermes-de.ts
|
||||
```
|
||||
|
||||
In build `CONFIG += sailfishapp_i18n` compila i `.qm` e li installa in
|
||||
`/usr/share/harbour-hermes/translations` (caricati all'avvio in base alla
|
||||
lingua di sistema).
|
||||
|
||||
## 5. Dipendenze lato server (WebUI)
|
||||
|
||||
- `/api/transcribe` richiede un provider STT attivo sul server
|
||||
|
||||
@@ -49,3 +49,16 @@ icons128.files = $$PWD/icons/128x128/harbour-hermes.png
|
||||
icons172.path = /usr/share/icons/hicolor/172x172/apps
|
||||
icons172.files = $$PWD/icons/172x172/harbour-hermes.png
|
||||
INSTALLS += icons86 icons108 icons128 icons172
|
||||
|
||||
# Traduzioni: l'inglese e' la lingua sorgente; it/fr/de tradotte.
|
||||
# Con sailfishapp_i18n i .qm vengono generati in build e installati in
|
||||
# /usr/share/harbour-hermes/translations, dove l'app li carica all'avvio
|
||||
# in base alla lingua di sistema (pattern ufficiale Sailfish).
|
||||
CONFIG += sailfishapp_i18n
|
||||
|
||||
TRANSLATIONS += \
|
||||
translations/harbour-hermes-it.ts \
|
||||
translations/harbour-hermes-fr.ts \
|
||||
translations/harbour-hermes-de.ts
|
||||
|
||||
OTHER_FILES += translations/*.ts
|
||||
|
||||
@@ -14,7 +14,7 @@ CoverBackground {
|
||||
|
||||
Label {
|
||||
anchors.centerIn: parent
|
||||
text: chat.count + qsTr(" messages")
|
||||
text: chat.count === 1 ? qsTr("1 message") : qsTr("%1 messages").arg(chat.count)
|
||||
color: Theme.primaryColor
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,6 @@ Page {
|
||||
function describe(n, u) {
|
||||
var c = n ? n : 0
|
||||
var d = new Date((u ? u : 0) * 1000)
|
||||
return c + qsTr(" messages") + " · " + Qt.formatDateTime(d, "dd/MM HH:mm")
|
||||
return (c === 1 ? qsTr("1 message") : qsTr("%1 messages").arg(c)) + " · " + Qt.formatDateTime(d, "dd/MM HH:mm")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Name: harbour-hermes
|
||||
Summary: Client for the Hermes Web UI with voice
|
||||
Version: 0.3.2
|
||||
Version: 0.4.0
|
||||
Release: 1
|
||||
Group: Qt/Qt
|
||||
License: MIT
|
||||
@@ -16,6 +16,7 @@ BuildRequires: pkgconfig(Qt5Quick)
|
||||
BuildRequires: pkgconfig(Qt5Network)
|
||||
BuildRequires: pkgconfig(Qt5Multimedia)
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: qt5-qttools-linguist
|
||||
|
||||
%description
|
||||
Native Sailfish OS client for the Hermes Web UI (hermes-webui).
|
||||
@@ -24,6 +25,12 @@ Sessions list, chat with live streaming replies, voice dictation
|
||||
(server-side TTS), plus a hands-free conversation mode.
|
||||
|
||||
%changelog
|
||||
* Sat Sep 12 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.4.0-1
|
||||
- Localizzazione dell'interfaccia: italiano, inglese (sorgente),
|
||||
francese e tedesco (78 stringhe per lingua); .qm generati con
|
||||
sailfishapp_i18n e installati in /usr/share/harbour-hermes/translations,
|
||||
caricati in base alla lingua di sistema; stringhe C++ in tr();
|
||||
plurali dei messaggi corretti
|
||||
* Sat Sep 12 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.3.2-1
|
||||
- README: nota sui limiti delle voci TTS (allowlist del server; 400
|
||||
invalid voice) e su come gestirli (voce vuota = default del server)
|
||||
@@ -93,3 +100,4 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop || tr
|
||||
%{_datadir}/icons/hicolor/128x128/apps/%{name}.png
|
||||
%{_datadir}/icons/hicolor/172x172/apps/%{name}.png
|
||||
%{_datadir}/%{name}/qml
|
||||
%{_datadir}/%{name}/translations
|
||||
|
||||
+3
-3
@@ -65,9 +65,9 @@ QString ApiClient::errorFromReply(QNetworkReply *reply, const QByteArray &body)
|
||||
}
|
||||
const int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
if (status == 401)
|
||||
return QStringLiteral("Authentication required");
|
||||
return tr("Authentication required");
|
||||
if (status > 0)
|
||||
return QStringLiteral("HTTP %1").arg(status);
|
||||
return tr("HTTP %1").arg(status);
|
||||
return reply->errorString();
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ void ApiClient::checkAuth()
|
||||
void ApiClient::login(const QString &password)
|
||||
{
|
||||
if (m_settings->baseUrl().isEmpty()) {
|
||||
setLastError(QStringLiteral("Server address not configured"));
|
||||
setLastError(tr("Server address not configured"));
|
||||
return;
|
||||
}
|
||||
setLastError(QString());
|
||||
|
||||
+2
-2
@@ -88,12 +88,12 @@ void ChatModel::send(const QString &text)
|
||||
// "non fare nulla" senza che si capisse il perché.
|
||||
if (m_sessionId.isEmpty()) {
|
||||
qDebug() << "[chat] send rifiutato: nessuna sessione aperta";
|
||||
emit notice(QStringLiteral("No session open"));
|
||||
emit notice(tr("No session open"));
|
||||
return;
|
||||
}
|
||||
if (m_busy) {
|
||||
qDebug() << "[chat] send rifiutato: un turno e' gia' in corso";
|
||||
emit notice(QStringLiteral("Wait for the current reply"));
|
||||
emit notice(tr("Wait for the current reply"));
|
||||
return;
|
||||
}
|
||||
qDebug() << "[chat] invio:" << trimmed.size() << "caratteri";
|
||||
|
||||
+12
-2
@@ -1,7 +1,9 @@
|
||||
#include <QGuiApplication>
|
||||
#include <QLocale>
|
||||
#include <QQmlContext>
|
||||
#include <QQuickView>
|
||||
#include <QDebug>
|
||||
#include <QTranslator>
|
||||
#include <sailfishapp.h>
|
||||
|
||||
#include "apiclient.h"
|
||||
@@ -19,9 +21,17 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
|
||||
// AppConfigLocation = ~/.config/harbour/hermes (zona persistente della sandbox).
|
||||
app->setOrganizationName(QStringLiteral("harbour"));
|
||||
app->setApplicationName(QStringLiteral("hermes"));
|
||||
app->setApplicationVersion(QStringLiteral("0.3.2"));
|
||||
app->setApplicationVersion(QStringLiteral("0.4.0"));
|
||||
|
||||
qDebug() << "harbour-hermes v0.3.2 build" << __DATE__ << __TIME__;
|
||||
qDebug() << "harbour-hermes v0.4.0 build" << __DATE__ << __TIME__;
|
||||
|
||||
// Traduzioni: it/fr/de da /usr/share/harbour-hermes/translations, in base
|
||||
// alla lingua di sistema (l'inglese e' la lingua sorgente: nessun .qm).
|
||||
QTranslator translator;
|
||||
if (translator.load(QLocale(), QStringLiteral("harbour-hermes"),
|
||||
QStringLiteral("-"),
|
||||
QStringLiteral("/usr/share/harbour-hermes/translations")))
|
||||
app->installTranslator(&translator);
|
||||
|
||||
Settings settings;
|
||||
ApiClient api(&settings);
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ bool Recorder::start()
|
||||
const QString container = chooseContainer(m_rec->supportedContainers());
|
||||
const QString codec = chooseCodec(m_rec->supportedAudioCodecs());
|
||||
if (container.isEmpty() || codec.isEmpty()) {
|
||||
emit failed(QStringLiteral("No audio format available"));
|
||||
emit failed(tr("No audio format available"));
|
||||
return false;
|
||||
}
|
||||
m_fallbackTried = false;
|
||||
|
||||
@@ -0,0 +1,426 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="de_DE">
|
||||
<context>
|
||||
<name>ApiClient</name>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="68" />
|
||||
<source>Authentication required</source>
|
||||
<translation>Authentifizierung erforderlich</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="70" />
|
||||
<source>HTTP %1</source>
|
||||
<translation>HTTP %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="155" />
|
||||
<source>Server address not configured</source>
|
||||
<translation>Serveradresse nicht konfiguriert</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatModel</name>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="91" />
|
||||
<source>No session open</source>
|
||||
<translation>Keine Sitzung geöffnet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="96" />
|
||||
<source>Wait for the current reply</source>
|
||||
<translation>Warte auf die laufende Antwort</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="41" />
|
||||
<source>Chat</source>
|
||||
<translation>Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="50" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="380" />
|
||||
<source>Hermes is writing…</source>
|
||||
<translation>Hermes schreibt…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="51" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="382" />
|
||||
<source>Speaking…</source>
|
||||
<translation>Wiedergabe…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: on</source>
|
||||
<translation>Sprachmodus: an</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: off</source>
|
||||
<translation>Sprachmodus: aus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="62" />
|
||||
<source>Read last reply aloud</source>
|
||||
<translation>Letzte Antwort vorlesen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: on</source>
|
||||
<translation>Auto-Vorlesen: an</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: off</source>
|
||||
<translation>Auto-Vorlesen: aus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="70" />
|
||||
<source>Stop playback</source>
|
||||
<translation>Wiedergabe stoppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="75" />
|
||||
<source>Cancel run</source>
|
||||
<translation>Antwort abbrechen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="80" />
|
||||
<source>Resync</source>
|
||||
<translation>Neu synchronisieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="143" />
|
||||
<source>Recording… %1 — tap Stop to transcribe</source>
|
||||
<translation>Aufnahme… %1 — tippe auf Stop zum Transkribieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="144" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="376" />
|
||||
<source>Transcribing…</source>
|
||||
<translation>Transkription…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Stop</source>
|
||||
<translation>Stop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Mic</source>
|
||||
<translation>Mikro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="178" />
|
||||
<source>Message…</source>
|
||||
<translation>Nachricht…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="186" />
|
||||
<source>Send</source>
|
||||
<translation>Senden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="331" />
|
||||
<source>Voice mode off after repeated errors</source>
|
||||
<translation>Sprachmodus nach wiederholten Fehlern aus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="348" />
|
||||
<source>Wait for the current reply first</source>
|
||||
<translation>Warte zuerst auf die laufende Antwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="374" />
|
||||
<source>● Listening — speak, I stop at the pause (tap to exit)</source>
|
||||
<translation>● Höre zu — sprich, ich stoppe bei der Pause (tippen zum Beenden)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="378" />
|
||||
<source>Sending…</source>
|
||||
<translation>Senden…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="383" />
|
||||
<source>Voice mode on</source>
|
||||
<translation>Sprachmodus an</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="404" />
|
||||
<source>No reply to read yet</source>
|
||||
<translation>Noch keine Antwort zum Vorlesen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>1 message</source>
|
||||
<translation>1 Nachricht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 Nachrichten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Recording…</source>
|
||||
<translation>Aufnahme…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Writing…</source>
|
||||
<translation>Schreibt…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LoginPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="14" />
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Sign in</source>
|
||||
<translation>Anmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="22" />
|
||||
<source>Use the same password you use in the Hermes Web UI in your browser.</source>
|
||||
<translation>Nutze dasselbe Passwort wie in der Hermes Web UI im Browser.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="28" />
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="36" />
|
||||
<source>Password</source>
|
||||
<translation>Passwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Signing in…</source>
|
||||
<translation>Anmeldung…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Recorder</name>
|
||||
<message>
|
||||
<location filename="../src/recorder.cpp" line="72" />
|
||||
<source>No audio format available</source>
|
||||
<translation>Kein Audioformat verfügbar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SessionsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="18" />
|
||||
<source>Sessions</source>
|
||||
<translation>Sitzungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="22" />
|
||||
<source>New session</source>
|
||||
<translation>Neue Sitzung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="26" />
|
||||
<source>Refresh</source>
|
||||
<translation>Aktualisieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="30" />
|
||||
<source>Settings</source>
|
||||
<translation>Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="34" />
|
||||
<source>Sign out</source>
|
||||
<translation>Abmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="70" />
|
||||
<source>No sessions</source>
|
||||
<translation>Keine Sitzungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="71" />
|
||||
<source>Pull down to create a new session</source>
|
||||
<translation>Nach unten ziehen, um eine neue Sitzung zu erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>1 message</source>
|
||||
<translation>1 Nachricht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 Nachrichten</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="21" />
|
||||
<source>Settings</source>
|
||||
<translation>Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="23" />
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="28" />
|
||||
<source>Web UI address</source>
|
||||
<translation>Web-UI-Adresse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="37" />
|
||||
<source>Voice</source>
|
||||
<translation>Stimme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="40" />
|
||||
<source>Read-aloud voice</source>
|
||||
<translation>Vorlese-Stimme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="45" />
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="73" />
|
||||
<source>(server default)</source>
|
||||
<translation>(Server-Standard)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="61" />
|
||||
<source>Voice presets (comma-separated)</source>
|
||||
<translation>Stimm-Presets (durch Kommas getrennt)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="69" />
|
||||
<source>TTS engine</source>
|
||||
<translation>TTS-Engine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="89" />
|
||||
<source>Engine presets (comma-separated)</source>
|
||||
<translation>Engine-Presets (durch Kommas getrennt)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="97" />
|
||||
<source>Read replies aloud</source>
|
||||
<translation>Antworten vorlesen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="98" />
|
||||
<source>Speak every completed reply automatically</source>
|
||||
<translation>Jede fertige Antwort automatisch vorlesen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="103" />
|
||||
<source>Voice dialog</source>
|
||||
<translation>Sprachdialog</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="106" />
|
||||
<source>Send right after dictation</source>
|
||||
<translation>Direkt nach dem Diktat senden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="107" />
|
||||
<source>Send the transcribed text automatically, without tapping Send</source>
|
||||
<translation>Den transkribierten Text automatisch senden, ohne Senden zu drücken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="113" />
|
||||
<source>Auto-stop pause</source>
|
||||
<translation>Auto-Stopp-Pause</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="119" />
|
||||
<source>1.0 second</source>
|
||||
<translation>1,0 Sekunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="120" />
|
||||
<source>1.5 seconds</source>
|
||||
<translation>1,5 Sekunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="121" />
|
||||
<source>2.0 seconds</source>
|
||||
<translation>2,0 Sekunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="122" />
|
||||
<source>3.0 seconds</source>
|
||||
<translation>3,0 Sekunden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="127" />
|
||||
<source>Mic sensitivity</source>
|
||||
<translation>Mikrofon-Empfindlichkeit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="131" />
|
||||
<source>High (even soft voices)</source>
|
||||
<translation>Hoch (auch leise Stimmen)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="132" />
|
||||
<source>Medium</source>
|
||||
<translation>Mittel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="133" />
|
||||
<source>Low (noisy rooms)</source>
|
||||
<translation>Niedrig (laute Umgebung)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="137" />
|
||||
<source>Account</source>
|
||||
<translation>Konto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="141" />
|
||||
<source>Sign out</source>
|
||||
<translation>Abmelden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="145" />
|
||||
<source>About</source>
|
||||
<translation>Über</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="154" />
|
||||
<source>Native client for the Hermes Web UI (hermes-webui): sessions, live streaming chat, server-side voice dictation and read-aloud.</source>
|
||||
<translation>Nativer Client für die Hermes Web UI (hermes-webui): Sitzungen, Live-Streaming-Chat, server-seitiges Diktat und Vorlesen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VoiceRecorder</name>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="71" />
|
||||
<source>No audio input device</source>
|
||||
<translation>Kein Audioeingabegerät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="94" />
|
||||
<source>Audio input format not supported</source>
|
||||
<translation>Audioeingabeformat nicht unterstützt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="110" />
|
||||
<source>Could not start audio capture</source>
|
||||
<translation>Aufnahme konnte nicht gestartet werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="213" />
|
||||
<source>Could not write the audio file</source>
|
||||
<translation>Audiodatei konnte nicht geschrieben werden</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
@@ -0,0 +1,426 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="fr_FR">
|
||||
<context>
|
||||
<name>ApiClient</name>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="68" />
|
||||
<source>Authentication required</source>
|
||||
<translation>Authentification requise</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="70" />
|
||||
<source>HTTP %1</source>
|
||||
<translation>HTTP %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="155" />
|
||||
<source>Server address not configured</source>
|
||||
<translation>Adresse du serveur non configurée</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatModel</name>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="91" />
|
||||
<source>No session open</source>
|
||||
<translation>Aucune session ouverte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="96" />
|
||||
<source>Wait for the current reply</source>
|
||||
<translation>Attendez la réponse en cours</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="41" />
|
||||
<source>Chat</source>
|
||||
<translation>Discussion</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="50" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="380" />
|
||||
<source>Hermes is writing…</source>
|
||||
<translation>Hermes écrit…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="51" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="382" />
|
||||
<source>Speaking…</source>
|
||||
<translation>Lecture…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: on</source>
|
||||
<translation>Mode vocal : activé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: off</source>
|
||||
<translation>Mode vocal : désactivé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="62" />
|
||||
<source>Read last reply aloud</source>
|
||||
<translation>Lire la dernière réponse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: on</source>
|
||||
<translation>Lecture auto : activée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: off</source>
|
||||
<translation>Lecture auto : désactivée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="70" />
|
||||
<source>Stop playback</source>
|
||||
<translation>Arrêter la lecture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="75" />
|
||||
<source>Cancel run</source>
|
||||
<translation>Annuler la réponse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="80" />
|
||||
<source>Resync</source>
|
||||
<translation>Resynchroniser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="143" />
|
||||
<source>Recording… %1 — tap Stop to transcribe</source>
|
||||
<translation>Enregistrement… %1 — appuyez sur Stop pour transcrire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="144" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="376" />
|
||||
<source>Transcribing…</source>
|
||||
<translation>Transcription…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Stop</source>
|
||||
<translation>Stop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Mic</source>
|
||||
<translation>Micro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="178" />
|
||||
<source>Message…</source>
|
||||
<translation>Message…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="186" />
|
||||
<source>Send</source>
|
||||
<translation>Envoyer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="331" />
|
||||
<source>Voice mode off after repeated errors</source>
|
||||
<translation>Mode vocal désactivé après plusieurs erreurs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="348" />
|
||||
<source>Wait for the current reply first</source>
|
||||
<translation>Attendez d'abord la réponse en cours</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="374" />
|
||||
<source>● Listening — speak, I stop at the pause (tap to exit)</source>
|
||||
<translation>● À l'écoute — parlez, je m'arrête à la pause (touchez pour quitter)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="378" />
|
||||
<source>Sending…</source>
|
||||
<translation>Envoi…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="383" />
|
||||
<source>Voice mode on</source>
|
||||
<translation>Mode vocal activé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="404" />
|
||||
<source>No reply to read yet</source>
|
||||
<translation>Aucune réponse à lire</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>1 message</source>
|
||||
<translation>1 message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 messages</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Recording…</source>
|
||||
<translation>Enregistrement…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Writing…</source>
|
||||
<translation>Écriture…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LoginPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="14" />
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Sign in</source>
|
||||
<translation>Se connecter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="22" />
|
||||
<source>Use the same password you use in the Hermes Web UI in your browser.</source>
|
||||
<translation>Utilisez le même mot de passe que dans l'Hermes Web UI de votre navigateur.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="28" />
|
||||
<source>Server</source>
|
||||
<translation>Serveur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="36" />
|
||||
<source>Password</source>
|
||||
<translation>Mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Signing in…</source>
|
||||
<translation>Connexion…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Recorder</name>
|
||||
<message>
|
||||
<location filename="../src/recorder.cpp" line="72" />
|
||||
<source>No audio format available</source>
|
||||
<translation>Aucun format audio disponible</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SessionsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="18" />
|
||||
<source>Sessions</source>
|
||||
<translation>Sessions</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="22" />
|
||||
<source>New session</source>
|
||||
<translation>Nouvelle session</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="26" />
|
||||
<source>Refresh</source>
|
||||
<translation>Actualiser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="30" />
|
||||
<source>Settings</source>
|
||||
<translation>Paramètres</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="34" />
|
||||
<source>Sign out</source>
|
||||
<translation>Se déconnecter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="70" />
|
||||
<source>No sessions</source>
|
||||
<translation>Aucune session</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="71" />
|
||||
<source>Pull down to create a new session</source>
|
||||
<translation>Tirez vers le bas pour créer une nouvelle session</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>1 message</source>
|
||||
<translation>1 message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 messages</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="21" />
|
||||
<source>Settings</source>
|
||||
<translation>Paramètres</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="23" />
|
||||
<source>Server</source>
|
||||
<translation>Serveur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="28" />
|
||||
<source>Web UI address</source>
|
||||
<translation>Adresse de la Web UI</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="37" />
|
||||
<source>Voice</source>
|
||||
<translation>Voix</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="40" />
|
||||
<source>Read-aloud voice</source>
|
||||
<translation>Voix de lecture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="45" />
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="73" />
|
||||
<source>(server default)</source>
|
||||
<translation>(défaut du serveur)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="61" />
|
||||
<source>Voice presets (comma-separated)</source>
|
||||
<translation>Préréglages de voix (séparés par des virgules)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="69" />
|
||||
<source>TTS engine</source>
|
||||
<translation>Moteur TTS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="89" />
|
||||
<source>Engine presets (comma-separated)</source>
|
||||
<translation>Préréglages de moteurs (séparés par des virgules)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="97" />
|
||||
<source>Read replies aloud</source>
|
||||
<translation>Lire les réponses à voix haute</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="98" />
|
||||
<source>Speak every completed reply automatically</source>
|
||||
<translation>Prononcer automatiquement chaque réponse terminée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="103" />
|
||||
<source>Voice dialog</source>
|
||||
<translation>Dialogue vocal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="106" />
|
||||
<source>Send right after dictation</source>
|
||||
<translation>Envoyer juste après la dictée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="107" />
|
||||
<source>Send the transcribed text automatically, without tapping Send</source>
|
||||
<translation>Envoyer automatiquement le texte transcrit, sans appuyer sur Envoyer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="113" />
|
||||
<source>Auto-stop pause</source>
|
||||
<translation>Pause d'arrêt auto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="119" />
|
||||
<source>1.0 second</source>
|
||||
<translation>1,0 seconde</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="120" />
|
||||
<source>1.5 seconds</source>
|
||||
<translation>1,5 seconde</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="121" />
|
||||
<source>2.0 seconds</source>
|
||||
<translation>2,0 secondes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="122" />
|
||||
<source>3.0 seconds</source>
|
||||
<translation>3,0 secondes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="127" />
|
||||
<source>Mic sensitivity</source>
|
||||
<translation>Sensibilité du micro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="131" />
|
||||
<source>High (even soft voices)</source>
|
||||
<translation>Élevée (voix faibles)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="132" />
|
||||
<source>Medium</source>
|
||||
<translation>Moyenne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="133" />
|
||||
<source>Low (noisy rooms)</source>
|
||||
<translation>Faible (pièces bruyantes)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="137" />
|
||||
<source>Account</source>
|
||||
<translation>Compte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="141" />
|
||||
<source>Sign out</source>
|
||||
<translation>Se déconnecter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="145" />
|
||||
<source>About</source>
|
||||
<translation>À propos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="154" />
|
||||
<source>Native client for the Hermes Web UI (hermes-webui): sessions, live streaming chat, server-side voice dictation and read-aloud.</source>
|
||||
<translation>Client natif pour l'Hermes Web UI (hermes-webui) : sessions, chat en streaming, dictée et lecture à voix haute côté serveur.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VoiceRecorder</name>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="71" />
|
||||
<source>No audio input device</source>
|
||||
<translation>Aucun périphérique d'entrée audio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="94" />
|
||||
<source>Audio input format not supported</source>
|
||||
<translation>Format d'entrée audio non pris en charge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="110" />
|
||||
<source>Could not start audio capture</source>
|
||||
<translation>Impossible de démarrer l'enregistrement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="213" />
|
||||
<source>Could not write the audio file</source>
|
||||
<translation>Impossible d'écrire le fichier audio</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
@@ -0,0 +1,426 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="it_IT">
|
||||
<context>
|
||||
<name>ApiClient</name>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="68" />
|
||||
<source>Authentication required</source>
|
||||
<translation>Autenticazione richiesta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="70" />
|
||||
<source>HTTP %1</source>
|
||||
<translation>HTTP %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/apiclient.cpp" line="155" />
|
||||
<source>Server address not configured</source>
|
||||
<translation>Indirizzo del server non configurato</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatModel</name>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="91" />
|
||||
<source>No session open</source>
|
||||
<translation>Nessuna sessione aperta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/chatmodel.cpp" line="96" />
|
||||
<source>Wait for the current reply</source>
|
||||
<translation>Aspetta la risposta in corso</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="41" />
|
||||
<source>Chat</source>
|
||||
<translation>Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="50" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="380" />
|
||||
<source>Hermes is writing…</source>
|
||||
<translation>Hermes sta scrivendo…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="51" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="382" />
|
||||
<source>Speaking…</source>
|
||||
<translation>Lettura…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: on</source>
|
||||
<translation>Modalità voce: attiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="58" />
|
||||
<source>Voice mode: off</source>
|
||||
<translation>Modalità voce: disattiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="62" />
|
||||
<source>Read last reply aloud</source>
|
||||
<translation>Leggi l'ultima risposta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: on</source>
|
||||
<translation>Auto-lettura: attiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="66" />
|
||||
<source>Auto-read: off</source>
|
||||
<translation>Auto-lettura: disattiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="70" />
|
||||
<source>Stop playback</source>
|
||||
<translation>Interrompi lettura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="75" />
|
||||
<source>Cancel run</source>
|
||||
<translation>Annulla risposta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="80" />
|
||||
<source>Resync</source>
|
||||
<translation>Risincronizza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="143" />
|
||||
<source>Recording… %1 — tap Stop to transcribe</source>
|
||||
<translation>Registrazione… %1 — tocca Stop per trascrivere</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="144" />
|
||||
<location filename="../qml/pages/ChatPage.qml" line="376" />
|
||||
<source>Transcribing…</source>
|
||||
<translation>Trascrizione…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Stop</source>
|
||||
<translation>Stop</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="162" />
|
||||
<source>Mic</source>
|
||||
<translation>Mic</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="178" />
|
||||
<source>Message…</source>
|
||||
<translation>Messaggio…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="186" />
|
||||
<source>Send</source>
|
||||
<translation>Invia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="331" />
|
||||
<source>Voice mode off after repeated errors</source>
|
||||
<translation>Modalità voce disattivata dopo errori ripetuti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="348" />
|
||||
<source>Wait for the current reply first</source>
|
||||
<translation>Aspetta prima la risposta in corso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="374" />
|
||||
<source>● Listening — speak, I stop at the pause (tap to exit)</source>
|
||||
<translation>● In ascolto — parla, mi fermo alla pausa (tocca per uscire)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="378" />
|
||||
<source>Sending…</source>
|
||||
<translation>Invio…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="383" />
|
||||
<source>Voice mode on</source>
|
||||
<translation>Modalità voce attiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/ChatPage.qml" line="404" />
|
||||
<source>No reply to read yet</source>
|
||||
<translation>Nessuna risposta da leggere</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoverPage</name>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>1 message</source>
|
||||
<translation>1 messaggio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="17" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 messaggi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Recording…</source>
|
||||
<translation>Registrazione…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/cover/CoverPage.qml" line="28" />
|
||||
<source>Writing…</source>
|
||||
<translation>Scrittura…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LoginPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="14" />
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Sign in</source>
|
||||
<translation>Accedi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="22" />
|
||||
<source>Use the same password you use in the Hermes Web UI in your browser.</source>
|
||||
<translation>Usa la stessa password dell'Hermes Web UI nel browser.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="28" />
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="36" />
|
||||
<source>Password</source>
|
||||
<translation>Password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/LoginPage.qml" line="47" />
|
||||
<source>Signing in…</source>
|
||||
<translation>Accesso in corso…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Recorder</name>
|
||||
<message>
|
||||
<location filename="../src/recorder.cpp" line="72" />
|
||||
<source>No audio format available</source>
|
||||
<translation>Nessun formato audio disponibile</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SessionsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="18" />
|
||||
<source>Sessions</source>
|
||||
<translation>Sessioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="22" />
|
||||
<source>New session</source>
|
||||
<translation>Nuova sessione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="26" />
|
||||
<source>Refresh</source>
|
||||
<translation>Aggiorna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="30" />
|
||||
<source>Settings</source>
|
||||
<translation>Impostazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="34" />
|
||||
<source>Sign out</source>
|
||||
<translation>Esci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="70" />
|
||||
<source>No sessions</source>
|
||||
<translation>Nessuna sessione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="71" />
|
||||
<source>Pull down to create a new session</source>
|
||||
<translation>Tira giù per creare una nuova sessione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>1 message</source>
|
||||
<translation>1 messaggio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SessionsPage.qml" line="125" />
|
||||
<source>%1 messages</source>
|
||||
<translation>%1 messaggi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="21" />
|
||||
<source>Settings</source>
|
||||
<translation>Impostazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="23" />
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="28" />
|
||||
<source>Web UI address</source>
|
||||
<translation>Indirizzo Web UI</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="37" />
|
||||
<source>Voice</source>
|
||||
<translation>Voce</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="40" />
|
||||
<source>Read-aloud voice</source>
|
||||
<translation>Voce di lettura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="45" />
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="73" />
|
||||
<source>(server default)</source>
|
||||
<translation>(default del server)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="61" />
|
||||
<source>Voice presets (comma-separated)</source>
|
||||
<translation>Preset voci (separati da virgola)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="69" />
|
||||
<source>TTS engine</source>
|
||||
<translation>Motore TTS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="89" />
|
||||
<source>Engine presets (comma-separated)</source>
|
||||
<translation>Preset motori (separati da virgola)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="97" />
|
||||
<source>Read replies aloud</source>
|
||||
<translation>Leggi le risposte ad alta voce</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="98" />
|
||||
<source>Speak every completed reply automatically</source>
|
||||
<translation>Pronuncia automaticamente ogni risposta completata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="103" />
|
||||
<source>Voice dialog</source>
|
||||
<translation>Dialogo vocale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="106" />
|
||||
<source>Send right after dictation</source>
|
||||
<translation>Invia subito dopo la dettatura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="107" />
|
||||
<source>Send the transcribed text automatically, without tapping Send</source>
|
||||
<translation>Invia il testo trascritto automaticamente, senza premere Invia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="113" />
|
||||
<source>Auto-stop pause</source>
|
||||
<translation>Pausa di stop automatico</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="119" />
|
||||
<source>1.0 second</source>
|
||||
<translation>1,0 secondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="120" />
|
||||
<source>1.5 seconds</source>
|
||||
<translation>1,5 secondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="121" />
|
||||
<source>2.0 seconds</source>
|
||||
<translation>2,0 secondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="122" />
|
||||
<source>3.0 seconds</source>
|
||||
<translation>3,0 secondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="127" />
|
||||
<source>Mic sensitivity</source>
|
||||
<translation>Sensibilità microfono</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="131" />
|
||||
<source>High (even soft voices)</source>
|
||||
<translation>Alta (anche voci flebili)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="132" />
|
||||
<source>Medium</source>
|
||||
<translation>Media</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="133" />
|
||||
<source>Low (noisy rooms)</source>
|
||||
<translation>Bassa (ambienti rumorosi)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="137" />
|
||||
<source>Account</source>
|
||||
<translation>Account</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="141" />
|
||||
<source>Sign out</source>
|
||||
<translation>Esci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="145" />
|
||||
<source>About</source>
|
||||
<translation>Informazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/pages/SettingsPage.qml" line="154" />
|
||||
<source>Native client for the Hermes Web UI (hermes-webui): sessions, live streaming chat, server-side voice dictation and read-aloud.</source>
|
||||
<translation>Client nativo per l'Hermes Web UI (hermes-webui): sessioni, chat in streaming, dettatura e lettura ad alta voce lato server.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VoiceRecorder</name>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="71" />
|
||||
<source>No audio input device</source>
|
||||
<translation>Nessun dispositivo di ingresso audio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="94" />
|
||||
<source>Audio input format not supported</source>
|
||||
<translation>Formato audio di ingresso non supportato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="110" />
|
||||
<source>Could not start audio capture</source>
|
||||
<translation>Impossibile avviare la registrazione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/voicerecorder.cpp" line="213" />
|
||||
<source>Could not write the audio file</source>
|
||||
<translation>Impossibile scrivere il file audio</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
Reference in New Issue
Block a user