From 92e1d44bed84b49872ac10509f4241efb53ffc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Deuchnord?= Date: Mon, 30 Jun 2014 13:49:23 +0200 Subject: [PATCH] Version 0.5 --- aboutdialog.cpp | 4 +- aboutdialog.ui | 2 +- deuchnord-hermes.pro | 2 + deuchnord-hermes.pro.user | 2 +- gestionmagasinsdialog.cpp | 6 +- gestionmagasinsdialog.ui | 3 - infosproduitdialog.cpp | 20 +- main.cpp | 10 +- mainwindow.cpp | 17 +- produititem.cpp | 31 +- produititem.ui | 8 +- scannerdialog.cpp | 8 +- settingsdialog.cpp | 10 +- settingsdialog.ui | 2 +- translations/en.qm | Bin 0 -> 16350 bytes translations/strings_en.ts | 575 +++++++++++++++++++++++++++++++++++++ 16 files changed, 627 insertions(+), 73 deletions(-) create mode 100644 translations/en.qm create mode 100644 translations/strings_en.ts diff --git a/aboutdialog.cpp b/aboutdialog.cpp index 32a9eaf..f92b2be 100644 --- a/aboutdialog.cpp +++ b/aboutdialog.cpp @@ -8,13 +8,13 @@ AboutDialog::AboutDialog(QWidget *parent, QString version) : ui(new Ui::AboutDialog) { ui->setupUi(this); - ui->version->setText("Version "+version); + ui->version->setText(tr("Version ")+version); ui->btnFermer->setFocus(); } void AboutDialog::on_btnQt_clicked() { - QMessageBox::aboutQt(this, "À propos de Qt"); + QMessageBox::aboutQt(this, tr("À propos de Qt")); } AboutDialog::~AboutDialog() diff --git a/aboutdialog.ui b/aboutdialog.ui index 6ecba17..2af6b18 100644 --- a/aboutdialog.ui +++ b/aboutdialog.ui @@ -42,7 +42,7 @@ - Version + Version diff --git a/deuchnord-hermes.pro b/deuchnord-hermes.pro index d24d4ac..e5d725e 100644 --- a/deuchnord-hermes.pro +++ b/deuchnord-hermes.pro @@ -40,6 +40,8 @@ FORMS += mainwindow.ui \ scannerdialog.ui \ settingsdialog.ui +TRANSLATIONS = strings.ts + RESOURCES += \ resources.qrc diff --git a/deuchnord-hermes.pro.user b/deuchnord-hermes.pro.user index fec12c3..0fff5ee 100644 --- a/deuchnord-hermes.pro.user +++ b/deuchnord-hermes.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/gestionmagasinsdialog.cpp b/gestionmagasinsdialog.cpp index 83e0cf2..922f0b4 100644 --- a/gestionmagasinsdialog.cpp +++ b/gestionmagasinsdialog.cpp @@ -46,7 +46,7 @@ GestionMagasinsDialog::GestionMagasinsDialog(QWidget *parent) : void GestionMagasinsDialog::on_btnAjoutMagasin_clicked() { - QString nom = QInputDialog::getText(this, "Ajouter un magasin", "Veuillez entrer le nom du nouveau magasin :"); + QString nom = QInputDialog::getText(this, tr("Ajouter un magasin"), tr("Veuillez entrer le nom du nouveau magasin :")); if(nom != "") { int nb = ui->listMagasins->count(); @@ -59,7 +59,7 @@ void GestionMagasinsDialog::on_btnAjoutMagasin_clicked() } if(alreadyHere) - QMessageBox::warning(this, "Ajout impossible", "Le magasin est déjà présent dans la liste !"); + QMessageBox::warning(this, tr("Ajout impossible"), tr("Le magasin est déjà présent dans la liste !")); else ui->listMagasins->addItem(nom); } @@ -67,7 +67,7 @@ void GestionMagasinsDialog::on_btnAjoutMagasin_clicked() void GestionMagasinsDialog::on_btnSupprMagasin_clicked() { - if(QMessageBox::question(this, "Supprimer "+ui->listMagasins->currentItem()->text()+" ?", "Voulez-vous vraiment supprimer ce magasin ?
Tous les produits associés perdront cette information, même si vous cliquez sur Annuler plus tard.", QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) + if(QMessageBox::question(this, tr("Suppression"), tr("Voulez-vous vraiment supprimer ce magasin ?
Tous les produits associés perdront cette information, même si vous cliquez sur Annuler plus tard."), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) { int row = ui->listMagasins->currentRow(); delete ui->listMagasins->currentItem(); diff --git a/gestionmagasinsdialog.ui b/gestionmagasinsdialog.ui index 9932631..13f9ff2 100644 --- a/gestionmagasinsdialog.ui +++ b/gestionmagasinsdialog.ui @@ -74,9 +74,6 @@ - - Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/infosproduitdialog.cpp b/infosproduitdialog.cpp index 2d0ea36..55af783 100644 --- a/infosproduitdialog.cpp +++ b/infosproduitdialog.cpp @@ -20,7 +20,7 @@ InfosProduitDialog::InfosProduitDialog(QWidget *parent, QWidget *mainWindow, QSt ui->setupUi(this); parentWidget = parent; - // On ajoute une ligne vide, conrrespondant à un magasin non reseigné. Il correspond à un indexMagasin de -1 + // On ajoute une ligne vide, correspondant à un magasin non renseigné. Il correspond à un indexMagasin de -1 ui->comboMagasin->addItem(""); // Récupération de la liste des magasins enregistrés @@ -90,7 +90,7 @@ InfosProduitDialog::InfosProduitDialog(QWidget *parent, QWidget *mainWindow, QSt void InfosProduitDialog::on_btnImageParcourir_clicked() { - QString filename = QFileDialog::getOpenFileName(this, "Sélectionnez une image", "", "Images supportées (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)"); + QString filename = QFileDialog::getOpenFileName(this, tr("Sélectionnez une image"), "", tr("Images supportées")+" (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)"); if(filename != "") { image = QPixmap(filename); @@ -107,7 +107,7 @@ void InfosProduitDialog::on_btnImageSupprimer_clicked() void InfosProduitDialog::on_btnAjoutFacture_clicked() { - QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une facture", "", "Fichiers supportés (*.pdf *.jpg *.jpeg *.png);;Fichiers PDF (*.pdf);;Images (*.jpg *.jpeg *.png)"); + QString fileName = QFileDialog::getOpenFileName(this, tr("Sélectionnez une facture"), "", tr("Fichiers supportés")+" (*.pdf *.jpg *.jpeg *.png);;"+tr("Fichiers PDF")+" (*.pdf);;"+tr("Images")+" (*.jpg *.jpeg *.png)"); if(fileName != "") { QFile fichier(fileName); @@ -122,7 +122,7 @@ void InfosProduitDialog::on_btnAjoutFacture_clicked() ui->listFactures->addItem(infoFile.fileName()); } else - QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez."); + QMessageBox::critical(this, tr("Erreur"), tr("Impossible de lire le fichier %1\nVérifiez qu'il est bien accessible en lecture et réessayez.", "%1 represents the file name").arg(fichier.fileName())); } } @@ -155,7 +155,7 @@ void InfosProduitDialog::on_factureScanned() ui->listFactures->addItem(infoFile.fileName()); } else - QMessageBox::critical(this, "Erreur", "Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : "+fileName); + QMessageBox::critical(this, tr("Erreur"), tr("Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : %1", "%1 represents the place of the file in the temp directory").arg(fileName)); } void InfosProduitDialog::on_listFactures_currentRowChanged() @@ -175,7 +175,7 @@ void InfosProduitDialog::on_listFactures_itemDoubleClicked(QListWidgetItem *item void InfosProduitDialog::on_btnSupprFacture_clicked() { - if(QMessageBox::question(this, "Hermès", "Voulez-vous vraiment supprimer cette facture ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) + if(QMessageBox::question(this, tr("Hermès"), tr("Voulez-vous vraiment supprimer cette facture ?\nCette action n'est pas réversible."), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { QListWidgetItem *item = ui->listFactures->selectedItems().value(0); facturePDF.remove(item->text()); @@ -188,7 +188,7 @@ void InfosProduitDialog::on_btnSupprFacture_clicked() void InfosProduitDialog::on_btnAjoutGarantie_clicked() { - QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une fiche garantie", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)"); + QString fileName = QFileDialog::getOpenFileName(this, tr("Sélectionnez une fiche garantie"), "", tr("Fichiers supportés")+" (*.pdf *.jpg *.jpeg *.png);;"+tr("Fichiers PDF")+" (*.pdf);;"+tr("Images")+" (*.jpg *.jpeg *.png)"); if(fileName != "") { QFile fichier(fileName); @@ -203,7 +203,7 @@ void InfosProduitDialog::on_btnAjoutGarantie_clicked() ui->listGaranties->addItem(infoFile.fileName()); } else - QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez."); + QMessageBox::critical(this, tr("Erreur"), tr("Impossible de lire le fichier %1\nVérifiez qu'il est bien accessible en lecture et réessayez.", "%1 represents the file name").arg(fichier.fileName())); } } @@ -235,7 +235,7 @@ void InfosProduitDialog::on_garantieScanned() ui->listGaranties->addItem(infoFile.fileName()); } else - QMessageBox::critical(this, "Erreur", "Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : "+fileName); + QMessageBox::critical(this, tr("Erreur"), tr("Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : %1", "%1 represents the place of the file in the temp directory").arg(fileName)); } void InfosProduitDialog::on_listGaranties_currentRowChanged() @@ -255,7 +255,7 @@ void InfosProduitDialog::on_listGaranties_itemDoubleClicked(QListWidgetItem *ite void InfosProduitDialog::on_btnSupprGarantie_clicked() { - if(QMessageBox::question(this, "Hermès", "Voulez-vous vraiment supprimer cette fiche garantie ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) + if(QMessageBox::question(this, tr("Hermès"), tr("Voulez-vous vraiment supprimer cette fiche garantie ?\nCette action n'est pas réversible."), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { QListWidgetItem *item = ui->listGaranties->selectedItems().value(0); garantiePDF.remove(item->text()); diff --git a/main.cpp b/main.cpp index b47b2c1..78d2cdd 100644 --- a/main.cpp +++ b/main.cpp @@ -7,12 +7,14 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - MainWindow w; QString locale = QLocale::system().name().section('_', 0, 0); - QTranslator translator; - translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - a.installTranslator(&translator); + + QTranslator* translator = new QTranslator(); + translator->load("translations/"+locale+".qm"); + a.installTranslator(translator); + + MainWindow w; w.show(); return a.exec(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 06ac59f..db3bf4f 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -33,12 +33,11 @@ MainWindow::MainWindow(QWidget *parent) : saveOnQuit = true; - version = "0.4.1"; + version = "0.5"; searchBox = new QLineEdit(this); searchBox->addAction(QIcon(":/icons/icon-search.png"), QLineEdit::LeadingPosition); - searchBox->setPlaceholderText("Rechercher..."); - searchBox->setToolTip("Recherchez un produit à partir de son nom.\nLa casse n'est pas prise en compte."); + searchBox->setPlaceholderText(tr("Rechercher...")); searchBox->setClearButtonEnabled(true); connect(searchBox, SIGNAL(textChanged(QString)), SLOT(searchProduit(QString))); @@ -99,8 +98,8 @@ void MainWindow::dlVersionFinished(QNetworkReply *reply) QString versionAvailable = reply->readAll(); if(versionAvailable != "" && version != versionAvailable) { - ui->statusBar->showMessage("Une nouvelle version ("+versionAvailable+") est disponible !"); - QPushButton* btnUpdate = new QPushButton("Télécharger la nouvelle version"); + ui->statusBar->showMessage(tr("Une nouvelle version (%1) est disponible !", "%1 represents the number of the new version (for instance: 0.4.1)").arg(versionAvailable)); + QPushButton* btnUpdate = new QPushButton(tr("Télécharger la nouvelle version")); connect(btnUpdate, SIGNAL(clicked()), this, SLOT(dlNewVersionBtnClicked())); ui->statusBar->addPermanentWidget(btnUpdate); } @@ -166,12 +165,12 @@ void MainWindow::on_actionNouveauProduit_triggered() if(nbMagasins == 0) { - QMessageBox::critical(this, "Erreur", "Aucun magasin ne semble avoir été enregistré.\nVeuillez les enregistrer avant d'entrer vos produits."); + QMessageBox::critical(this, tr("Erreur"), tr("Aucun magasin ne semble avoir été enregistré.\nVeuillez les enregistrer avant d'entrer vos produits.")); ui->actionGererMagasins->trigger(); } else { - ProduitItem *prod = new ProduitItem(this, "Nouveau produit", QDate::currentDate(), QDate::currentDate().addYears(1)); + ProduitItem *prod = new ProduitItem(this, tr("Nouveau produit", "Showed in the field \"Name\" in the product information window by default."), QDate::currentDate(), QDate::currentDate().addYears(1)); prod->openDialog(true); QListWidgetItem* item = ajouterProduit(prod); item->setSelected(true); @@ -193,7 +192,7 @@ void MainWindow::on_actionSupprimerProduit_triggered(bool dontAskConfirm) int answer; if(!dontAskConfirm) - answer = QMessageBox::question(this, "Supprimer le produit", "Êtes-vous sûr de vouloir supprimer ce produit ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No); + answer = QMessageBox::question(this, tr("Supprimer le produit"), tr("Êtes-vous sûr de vouloir supprimer ce produit ?\nCette action n'est pas réversible."), QMessageBox::Yes | QMessageBox::No); else answer = QMessageBox::Yes; @@ -290,7 +289,7 @@ void MainWindow::updateStatusMessage() if(!ui->listeProduits->item(i)->isHidden()) nb++; - ui->statusBar->showMessage(QString::number(nb)+" produit(s) affiché(s)."); + ui->statusBar->showMessage(tr("%n produit(s) affiché(s).", "", nb)); } MainWindow::~MainWindow() diff --git a/produititem.cpp b/produititem.cpp index fb833f9..db3fdc7 100644 --- a/produititem.cpp +++ b/produititem.cpp @@ -38,7 +38,7 @@ ProduitItem::ProduitItem(QWidget *parent, QString nomProduit, QDate dateAchat, Q this->image = image; this->image.scaled(QSize(128, 128), Qt::KeepAspectRatio); ui->image->setPixmap(this->image); - ui->btnMoreInfo->setToolTip("Ouvre une fenêtre contenant toutes les informations\nsur votre "+nomProduit+"."); + ui->btnMoreInfo->setToolTip(tr("Ouvre une fenêtre contenant toutes les informations\nsur votre %1.", "%1 represents the name of the product, as given in the Name field.").arg(nomProduit)); } void ProduitItem::on_btnMoreInfo_clicked(bool deleteOnCancel) @@ -117,40 +117,19 @@ void ProduitItem::setGaranties(QHash garanties) // Permet de mettre à jour le petit texte en-dessous du nom du produit void ProduitItem::updateDescription() { - QString jourAchat = QString::number(dateAchat.day()); - - if(dateAchat.day() < 10) - jourAchat = "0"+jourAchat; - - QString moisAchat = QString::number(dateAchat.month()); - - if(dateAchat.month() < 10) - moisAchat = "0"+moisAchat; - - descriptionListe = "Acheté le "+jourAchat+"/"+moisAchat+"/"+QString::number(dateAchat.year())+", "; - - QString jourFinGarantie = QString::number(dateFinGarantie.day()); - - if(dateFinGarantie.day() < 10) - jourFinGarantie = "0"+jourFinGarantie; - - QString moisFinGarantie = QString::number(dateFinGarantie.month()); - - if(dateFinGarantie.month() < 10) - moisFinGarantie = "0"+moisFinGarantie; if(dateFinGarantie != QDate(1970, 1, 1)) { if(QDate::currentDate() < dateFinGarantie) - descriptionListe += "fin de la garantie le "+jourFinGarantie+"/"+moisFinGarantie+"/"+QString::number(dateFinGarantie.year()); + descriptionListe = tr("Acheté le %1, fin de la garantie le %2", "%1 and %2 are dates").arg(dateAchat.toString(Qt::LocaleDate), dateAchat.toString(Qt::LocaleDate)); else - descriptionListe += "garantie expirée"; + descriptionListe = tr("Acheté le %1, garantie expirée", "%1 is a date").arg(dateAchat.toString(Qt::LocaleDate)); } else - descriptionListe += "garantie à vie"; + descriptionListe = tr("Acheté le %1, garantie à vie", "%1 is a date").arg(dateAchat.toString(Qt::LocaleDate)); if(this->enSAV) - descriptionListe += "\nParti en SAV"; + descriptionListe += tr("\nParti en SAV"); ui->infosProduit->setText(descriptionListe); } diff --git a/produititem.ui b/produititem.ui index 81bbf8a..ddc9fe8 100644 --- a/produititem.ui +++ b/produititem.ui @@ -17,7 +17,7 @@ - Form + Form @@ -29,7 +29,7 @@ - <img src="~/Images/sw2.jpg" /> + @@ -49,7 +49,7 @@ - <h1>Nom produit</h1> + <h1>Nom produit</h1> @@ -84,7 +84,7 @@ - TextLabel + TextLabel Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop diff --git a/scannerdialog.cpp b/scannerdialog.cpp index 2335758..5514eca 100644 --- a/scannerdialog.cpp +++ b/scannerdialog.cpp @@ -65,10 +65,10 @@ void ScannerDialog::scanTestFinished(int r = 0) if(c == 0) QDesktopServices::openUrl(QUrl("file://"+QDir::tempPath()+"/test.pdf")); else - QMessageBox::critical(this, "Erreur", "Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur "+QString::number(c)); + QMessageBox::critical(this, tr("Erreur"), tr("Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur %1").arg(QString::number(c))); } else - QMessageBox::critical(this, "Erreur", "Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge."); + QMessageBox::critical(this, tr("Erreur"), tr("Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge.")); #endif } @@ -97,10 +97,10 @@ void ScannerDialog::scanFinished(int r) { int c = system(s.c_str()); if(c != 0) - QMessageBox::critical(this, "Erreur", "Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur "+QString::number(c)); + QMessageBox::critical(this, tr("Erreur"), tr("Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur %1").arg(QString::number(c))); else this->accept(); } else - QMessageBox::critical(this, "Erreur", "Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge."); + QMessageBox::critical(this, tr("Erreur"), tr("Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge.")); } diff --git a/settingsdialog.cpp b/settingsdialog.cpp index b22ade5..0922813 100644 --- a/settingsdialog.cpp +++ b/settingsdialog.cpp @@ -19,13 +19,13 @@ SettingsDialog::SettingsDialog(QWidget *parent) : void SettingsDialog::on_btnChangeSavePlace_clicked() { - QString savePlace = QFileDialog::getExistingDirectory(this, "Choisir un dossier de sauvegarde", settings->value("placeSave").toString()); + QString savePlace = QFileDialog::getExistingDirectory(this, tr("Choisir un dossier de sauvegarde"), settings->value("placeSave").toString()); bool ok = true; bool replaceFile = false; QDir dir(savePlace+"/deuchnord-hermes"); if(dir.exists()) { - int whatToDo = QMessageBox::question(this, "Confirmation", "Des fichiers appartenant à Hermès semblent être déjà présents. Que voulez-vous faire ?
Cliquez sur Appliquer pour utiliser les fichiers présents à cet emplacement.
Cliquez sur Réinitialiser pour écraser les fichiers présents à cet emplacement.
Cliquez sur Annuler pour ne pas changer l'emplacement.", QMessageBox::Apply | QMessageBox::Reset | QMessageBox::Cancel, QMessageBox::Cancel); + int whatToDo = QMessageBox::question(this, tr("Confirmation"), tr("Des fichiers appartenant à Hermès semblent être déjà présents. Que voulez-vous faire ?
Cliquez sur Appliquer pour utiliser les fichiers présents à cet emplacement.
Cliquez sur Réinitialiser pour écraser les fichiers présents à cet emplacement.
Cliquez sur Annuler pour ne pas changer l'emplacement.", "The texts in italic should correspond to the texts on the buttons."), QMessageBox::Apply | QMessageBox::Reset | QMessageBox::Cancel, QMessageBox::Cancel); switch(whatToDo) { @@ -75,10 +75,10 @@ void SettingsDialog::on_buttonBox_accepted() // Affichage d'un message s'il faut redémarrer Hermès if(restartNeeded) { - QString message = "Certains changements dans votre configuration nécessite de relancer Hermès."; + QString message = tr("Certains changements dans votre configuration nécessitent de relancer Hermès."); if(!restartWillSave) - message += "\nAttention, les changements effectués ne seront pas enregistrés !"; - QMessageBox::warning(this, "Mise à jour de la configuration", message); + message += tr("\nAttention, les changements effectués ne seront pas enregistrés !"); + QMessageBox::warning(this, tr("Mise à jour de la configuration"), message); } } diff --git a/settingsdialog.ui b/settingsdialog.ui index 87b0a3a..47f68e4 100644 --- a/settingsdialog.ui +++ b/settingsdialog.ui @@ -36,7 +36,7 @@ font-weight: bold
- TextLabel + TextLabel true diff --git a/translations/en.qm b/translations/en.qm new file mode 100644 index 0000000000000000000000000000000000000000..fab2d6933462bd80b700313ef489582ea0411269 GIT binary patch literal 16350 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 + + + + AboutDialog + + + À propos de Hermès + About Hermes + + + + <html><head/><body><h1>Deuchnord Hermès</h1></body></html> + <html><head/><body><h1>Heuchnord Hermes</h1></body></html> + + + + <html><head/><body><p>Hermès est un logiciel libre distribué sous la licence MIT par Jérôme Deuchnord.</p><p>Basé sur Qt 5.</p></body></html> + <html><head/><body><p>Hermes is a free software distributed by Jérôme Deuchnord under the MIT licensed.</p><p>Based on Qt 5.</p></body></html> + + + + + À propos de Qt + About Qt + + + + Fermer + Close + + + + Version + Version + + + + GestionMagasinsDialog + + + Gérer les magasins + Manage the shops... + + + + Ajouter + Add + + + + Supprimer + Delete + + + + Ajouter un magasin + Add a shop + + + + Veuillez entrer le nom du nouveau magasin : + Please enter the name of the new shop: + + + + Ajout impossible + Unable to add the shop + + + + Le magasin est déjà présent dans la liste ! + The shop is already in your list! + + + + Suppression + Delete the shop + + + + Voulez-vous vraiment supprimer ce magasin ?<br />Tous les produits associés perdront cette information, <em>même si vous cliquez sur Annuler plus tard</em>. + Do you really want to delete this shop?<br />All the products associated willl lose this information, <em>even is you click Cancel later</em>. + + + + InfosProduitDialog + + + Informations sur le produit + Product information + + + + Produit + Product + + + + Nom : + Name: + + + + Date d'achat : + Buy on: + + + + Fin de la garantie : + End of warranty: + + + + Cochez cette case si vous avez envoyé le produit en SAV. + Check this box if you sent the product to the manufacturer. + + + + Actuellement en SAV + Sent to the manufacturer + + + + Image à afficher : + Picture to display: + + + + Image + Picture + + + + Parcourir... + Set the picture... + + + + Supprimer + Delete + + + + Taille conseillée : 128px de hauteur + Recommended height: 128px + + + + Ce produit bénéficie d'une garantie à vie + This product's warranty has no end + + + + Magasin : + Shop: + + + + Factures && garanties + Bills && warranty cards + + + + Cet onglet permet de conserver des versions numérisées de vos factures et garanties, afin de vous délester de papiers encombrants. Un scanner de bonne qualité est toutefois requis, ces pièces devant être imprimées en cas de retour du produit en SAV. +Vous pouvez ouvrir une facture ou une garantie en double-cliquant dessus. + This tab allows you to store the digitized versions of your bills and warranties, in order to get rid of bulky paper. Your scanner should be good quality, because you will need to print them if you have to return the product to the manufacturer. +You may open a bill or a warranty just by clicking it. + + + + Factures + Bills + + + + Ajouter une facture + Add a bill + + + + Numériser une facture et l'ajouter + Digitize a bill and add it + + + + Supprimer la facture + Delete the bill + + + + Garanties + Warranty cards + + + + Ajouter une garantie + Add a warranty card + + + + Numériser une garantie et l'ajouter + Digitize a waranty card and add it + + + + Supprimer la garantie + Delete the warranty card + + + + Sélectionnez une image + Select a picture + + + + Images supportées + Supported pictures + + + + Sélectionnez une facture + Select a bill + + + + + Fichiers supportés + Supported files + + + + + Fichiers PDF + PDF files + + + + + Images + Pictures + + + + + + + Erreur + Error + + + + + Impossible de lire le fichier %1 +Vérifiez qu'il est bien accessible en lecture et réessayez. + %1 represents the file name + Cannot read the file %1 +Please check it is readable and try again. + + + + + Une erreur s'est produite lors de l'ajout de votre document numérisé. +Vous pouvez toujours ajouter le document manuellement, il se trouve ici : %1 + %1 represents the place of the file in the temp directory + An error has occured while adding the digitized document. +You can add it manually, here is its place: %1 + + + + + Hermès + Hermes + + + + Voulez-vous vraiment supprimer cette facture ? +Cette action n'est pas réversible. + Do really want to delete this bill? +This action is irreversible. + + + + Sélectionnez une fiche garantie + Select a warranty card + + + + Voulez-vous vraiment supprimer cette fiche garantie ? +Cette action n'est pas réversible. + Do you really want to delete this warranty card? +This action is irreversible. + + + + MainWindow + + + Gestionnaire de garanties Hermès + Warranties manager Hermes + + + + Fichier + File + + + + Aide + Help + + + + Outils + Tools + + + + Nouveau produit... + New product... + + + + Ctrl+N + Ctrl+N + + + + + Supprimer le produit + Delete the product + + + + Ctrl+D + Ctrl+D + + + + Gérer les magasins... + Manage the shops... + + + + Centre d'aide... + Help center (currently only in French)... + + + + F1 + F1 + + + + À propos... + About... + + + + Signaler un bug... + Report a bug... + + + + Préférences + Preferences + + + + Rechercher... + Search... + + + + Une nouvelle version (%1) est disponible ! + %1 represents the number of the new version (for instance: 0.4.1) + A new version (%1) is available! + + + + Télécharger la nouvelle version + Download the new version + + + + Erreur + Error + + + + Aucun magasin ne semble avoir été enregistré. +Veuillez les enregistrer avant d'entrer vos produits. + It seems you have no shops currently. +Please enter your shops before to add your products. + + + + Nouveau produit + Showed in the field "Name" in the product information window by default. + New product + + + + Êtes-vous sûr de vouloir supprimer ce produit ? +Cette action n'est pas réversible. + Do really want to delete this product? +This action is irreversible. + + + + %n produit(s) affiché(s). + + %n product displayed + %n products displayed + + + + + ProduitItem + + + Plus d'infos... + More info... + + + + Ouvre une fenêtre contenant toutes les informations +sur votre %1. + %1 represents the name of the product, as given in the Name field. + Open a window containing all the information +about your %1. + + + + Acheté le %1, fin de la garantie le %2 + %1 and %2 are dates + Bought on %1, your warranty ends on %2 + + + + Acheté le %1, garantie expirée + %1 is a date + Bought on %1, warranty expired + + + + Acheté le %1, garantie à vie + %1 is a date + Bought on %1, warranty without end + + + + +Parti en SAV + Returned to the manufacturer + + + + ScannerDialog + + + Numériser un document + Digitize a document + + + + <html><head/><body><p><span style=" font-size:xx-large; font-weight:600;">Numériser un document</span></p></body></html> + <html><head/><body><p><span style=" font-size:xx-large; font-weight:600;">Digitize a document</span></p></body></html> + + + + <html><head/><body><p>Cette fenêtre permet de numériser votre document rapidement.</p><p>Placez votre document dans votre scanner, puis cliquez sur le bouton <span style=" font-style:italic;">Numériser</span> ci-dessous. Vous pouvez également effectuer un essai pour vérifier que votre document est bien placé.</p><p>Remarque : la numérisation de test est effectuée en basse résolution. Elle ne sera pas enregistrée sur Hermès.</p></body></html> + <html><head/><body><p>This window allows you to digitize your document quickly.</p><p>Put your document into your scanner, and click the button <span style=" font-style:italic;">Digitize</span> bellow. You can make a test to check that your document is well placed too.</p><p>Notice that the test digitization is done in low resolution. It will not be saved on Hermes.</p></body></html> + + + + Test + Test + + + + Numériser + Digitize + + + + Annuler + Cancel + + + + + + + Erreur + Error + + + + + Votre document a pu être numérisé, mais un problème est survenu lors de son traitement. +Erreur %1 + Your document could be digitized, but a problem has occured while processing it. +Error %1 + + + + + Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez. +Si le problème persiste, il est probable que votre scanner ne soit pas pris en charge. + Unable to find your scanner. Please check it is connected to your computer, and that it is switched on, then try again. +If the problem persist, your scanner may be incompatible. + + + + SettingsDialog + + + Préférences + Preferences + + + + Lieu de sauvegarde + Save place + + + + Le lieu de sauvegarde actuel est : + Your current save place is: + + + + Changer l'emplacement + Set the save place + + + + <html><head/><body><p>Un dossier nommé <span style=" font-style:italic;">deuchnord-hermes</span> contenant vos données sera créé à l'emplacement sélectionné.</p></body></html> + <html><head/><body><p>A directory named <span style=" font-style:italic;">deuchnord-hermes</span> will be created with your data.</p></body></html> + + + + Choisir un dossier de sauvegarde + Choose a save place + + + + Confirmation + Confirmation + + + + Des fichiers appartenant à Hermès semblent être déjà présents. Que voulez-vous faire ?<br />Cliquez sur <em>Appliquer</em> pour utiliser les fichiers présents à cet emplacement.<br />Cliquez sur <em>Réinitialiser</em> pour écraser les fichiers présents à cet emplacement.<br />Cliquez sur <em>Annuler</em> pour ne pas changer l'emplacement. + The texts in italic should correspond to the texts on the buttons. + There are files that seem to belong to Hermes here. What do you want to do?<br />Click <em>Apply</em> to use the files on this place.<br />Click <em>Reset</em> to delete the files on this place.<br />Click <em>Cancel</em> to not change the place. + + + + Certains changements dans votre configuration nécessitent de relancer Hermès. + Some changes in your configuration need to restart Hermes. + + + + +Attention, les changements effectués ne seront pas enregistrés ! + Caution, any changes will not be saved! + + + + Mise à jour de la configuration + Changing the configuration + + +