Browse Source

Version 0.5

tags/0.7
Jérôme Deuchnord 9 years ago
parent
commit
92e1d44bed
16 changed files with 627 additions and 73 deletions
  1. +2
    -2
      aboutdialog.cpp
  2. +1
    -1
      aboutdialog.ui
  3. +2
    -0
      deuchnord-hermes.pro
  4. +1
    -1
      deuchnord-hermes.pro.user
  5. +3
    -3
      gestionmagasinsdialog.cpp
  6. +0
    -3
      gestionmagasinsdialog.ui
  7. +10
    -10
      infosproduitdialog.cpp
  8. +6
    -4
      main.cpp
  9. +8
    -9
      mainwindow.cpp
  10. +5
    -26
      produititem.cpp
  11. +4
    -4
      produititem.ui
  12. +4
    -4
      scannerdialog.cpp
  13. +5
    -5
      settingsdialog.cpp
  14. +1
    -1
      settingsdialog.ui
  15. BIN
      translations/en.qm
  16. +575
    -0
      translations/strings_en.ts

+ 2
- 2
aboutdialog.cpp View File

@@ -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()


+ 1
- 1
aboutdialog.ui View File

@@ -42,7 +42,7 @@
<item>
<widget class="QLabel" name="version">
<property name="text">
<string>Version</string>
<string notr="true">Version</string>
</property>
</widget>
</item>


+ 2
- 0
deuchnord-hermes.pro View File

@@ -40,6 +40,8 @@ FORMS += mainwindow.ui \
scannerdialog.ui \
settingsdialog.ui

TRANSLATIONS = strings.ts

RESOURCES += \
resources.qrc



+ 1
- 1
deuchnord-hermes.pro.user View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.0.1, 2014-06-29T16:52:08. -->
<!-- Written by QtCreator 3.0.1, 2014-06-30T13:45:04. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>


+ 3
- 3
gestionmagasinsdialog.cpp View File

@@ -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 ?<br />Tous les produits associés perdront cette information, <em>même si vous cliquez sur Annuler plus tard</em>.", QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes)
if(QMessageBox::question(this, tr("Suppression"), tr("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>."), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes)
{
int row = ui->listMagasins->currentRow();
delete ui->listMagasins->currentItem();


+ 0
- 3
gestionmagasinsdialog.ui View File

@@ -74,9 +74,6 @@
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>


+ 10
- 10
infosproduitdialog.cpp View File

@@ -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());


+ 6
- 4
main.cpp View File

@@ -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();


+ 8
- 9
mainwindow.cpp View File

@@ -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()


+ 5
- 26
produititem.cpp View File

@@ -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<QString, QByteArray> 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);
}


+ 4
- 4
produititem.ui View File

@@ -17,7 +17,7 @@
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
<string notr="true">Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -29,7 +29,7 @@
</sizepolicy>
</property>
<property name="text">
<string>&lt;img src=&quot;~/Images/sw2.jpg&quot; /&gt;</string>
<string notr="true"/>
</property>
</widget>
</item>
@@ -49,7 +49,7 @@
</sizepolicy>
</property>
<property name="text">
<string>&lt;h1&gt;Nom produit&lt;/h1&gt;</string>
<string notr="true">&lt;h1&gt;Nom produit&lt;/h1&gt;</string>
</property>
</widget>
</item>
@@ -84,7 +84,7 @@
</sizepolicy>
</property>
<property name="text">
<string>TextLabel</string>
<string notr="true">TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>


+ 4
- 4
scannerdialog.cpp View File

@@ -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."));
}

+ 5
- 5
settingsdialog.cpp View File

@@ -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 ?<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.", 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 ?<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."), 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);
}
}



+ 1
- 1
settingsdialog.ui View File

@@ -36,7 +36,7 @@
<string notr="true">font-weight: bold</string>
</property>
<property name="text">
<string>TextLabel</string>
<string notr="true">TextLabel</string>
</property>
<property name="wordWrap">
<bool>true</bool>


BIN
translations/en.qm View File


+ 575
- 0
translations/strings_en.ts View File

@@ -0,0 +1,575 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en">
<context>
<name>AboutDialog</name>
<message>
<location filename="../aboutdialog.ui" line="26"/>
<source>À propos de Hermès</source>
<translation>About Hermes</translation>
</message>
<message>
<location filename="../aboutdialog.ui" line="38"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;h1&gt;Deuchnord Hermès&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;h1&gt;Heuchnord Hermes&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../aboutdialog.ui" line="58"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Hermès est un logiciel libre distribué sous la licence MIT par Jérôme Deuchnord.&lt;/p&gt;&lt;p&gt;Basé sur Qt 5.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Hermes is a free software distributed by Jérôme Deuchnord under the MIT licensed.&lt;/p&gt;&lt;p&gt;Based on Qt 5.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../aboutdialog.ui" line="89"/>
<location filename="../aboutdialog.cpp" line="17"/>
<source>À propos de Qt</source>
<translation>About Qt</translation>
</message>
<message>
<location filename="../aboutdialog.ui" line="96"/>
<source>Fermer</source>
<translation>Close</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="11"/>
<source>Version </source>
<translation>Version</translation>
</message>
</context>
<context>
<name>GestionMagasinsDialog</name>
<message>
<location filename="../gestionmagasinsdialog.ui" line="14"/>
<source>Gérer les magasins</source>
<translation>Manage the shops...</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.ui" line="30"/>
<source>Ajouter</source>
<translation>Add</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.ui" line="47"/>
<source>Supprimer</source>
<translation>Delete</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="49"/>
<source>Ajouter un magasin</source>
<translation>Add a shop</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="49"/>
<source>Veuillez entrer le nom du nouveau magasin :</source>
<translation>Please enter the name of the new shop:</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="62"/>
<source>Ajout impossible</source>
<translation>Unable to add the shop</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="62"/>
<source>Le magasin est déjà présent dans la liste !</source>
<translation>The shop is already in your list!</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="70"/>
<source>Suppression</source>
<translation>Delete the shop</translation>
</message>
<message>
<location filename="../gestionmagasinsdialog.cpp" line="70"/>
<source>Voulez-vous vraiment supprimer ce magasin ?&lt;br /&gt;Tous les produits associés perdront cette information, &lt;em&gt;même si vous cliquez sur Annuler plus tard&lt;/em&gt;.</source>
<translation>Do you really want to delete this shop?&lt;br /&gt;All the products associated willl lose this information, &lt;em&gt;even is you click Cancel later&lt;/em&gt;.</translation>
</message>
</context>
<context>
<name>InfosProduitDialog</name>
<message>
<location filename="../infosproduitdialog.ui" line="14"/>
<source>Informations sur le produit</source>
<translation>Product information</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="24"/>
<source>Produit</source>
<translation>Product</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="33"/>
<source>Nom :</source>
<translation>Name:</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="43"/>
<source>Date d&apos;achat :</source>
<translation>Buy on:</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="57"/>
<source>Fin de la garantie :</source>
<translation>End of warranty:</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="81"/>
<source>Cochez cette case si vous avez envoyé le produit en SAV.</source>
<translation>Check this box if you sent the product to the manufacturer.</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="84"/>
<source>Actuellement en SAV</source>
<translation>Sent to the manufacturer</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="91"/>
<source>Image à afficher :</source>
<translation>Picture to display:</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="101"/>
<source>Image</source>
<translation>Picture</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="113"/>
<source>Parcourir...</source>
<translation>Set the picture...</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="120"/>
<source>Supprimer</source>
<translation>Delete</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="129"/>
<source>Taille conseillée : 128px de hauteur</source>
<translation>Recommended height: 128px</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="142"/>
<source>Ce produit bénéficie d&apos;une garantie à vie</source>
<translation>This product&apos;s warranty has no end</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="149"/>
<source>Magasin :</source>
<translation>Shop:</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="157"/>
<source>Factures &amp;&amp; garanties</source>
<translation>Bills &amp;&amp; warranty cards</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="163"/>
<source>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.</source>
<translation>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.</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="174"/>
<source>Factures</source>
<translation>Bills</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="188"/>
<source>Ajouter une facture</source>
<translation>Add a bill</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="202"/>
<source>Numériser une facture et l&apos;ajouter</source>
<translation>Digitize a bill and add it</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="219"/>
<source>Supprimer la facture</source>
<translation>Delete the bill</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="251"/>
<source>Garanties</source>
<translation>Warranty cards</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="265"/>
<source>Ajouter une garantie</source>
<translation>Add a warranty card</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="279"/>
<source>Numériser une garantie et l&apos;ajouter</source>
<translation>Digitize a waranty card and add it</translation>
</message>
<message>
<location filename="../infosproduitdialog.ui" line="296"/>
<source>Supprimer la garantie</source>
<translation>Delete the warranty card</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="93"/>
<source>Sélectionnez une image</source>
<translation>Select a picture</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="93"/>
<source>Images supportées</source>
<translation>Supported pictures</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="110"/>
<source>Sélectionnez une facture</source>
<translation>Select a bill</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="110"/>
<location filename="../infosproduitdialog.cpp" line="191"/>
<source>Fichiers supportés</source>
<translation>Supported files</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="110"/>
<location filename="../infosproduitdialog.cpp" line="191"/>
<source>Fichiers PDF</source>
<translation>PDF files</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="110"/>
<location filename="../infosproduitdialog.cpp" line="191"/>
<source>Images</source>
<translation>Pictures</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="125"/>
<location filename="../infosproduitdialog.cpp" line="158"/>
<location filename="../infosproduitdialog.cpp" line="206"/>
<location filename="../infosproduitdialog.cpp" line="238"/>
<source>Erreur</source>
<translation>Error</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="125"/>
<location filename="../infosproduitdialog.cpp" line="206"/>
<source>Impossible de lire le fichier %1
Vérifiez qu&apos;il est bien accessible en lecture et réessayez.</source>
<comment>%1 represents the file name</comment>
<translation>Cannot read the file %1
Please check it is readable and try again.</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="158"/>
<location filename="../infosproduitdialog.cpp" line="238"/>
<source>Une erreur s&apos;est produite lors de l&apos;ajout de votre document numérisé.
Vous pouvez toujours ajouter le document manuellement, il se trouve ici : %1</source>
<comment>%1 represents the place of the file in the temp directory</comment>
<translation>An error has occured while adding the digitized document.
You can add it manually, here is its place: %1</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="178"/>
<location filename="../infosproduitdialog.cpp" line="258"/>
<source>Hermès</source>
<translation>Hermes</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="178"/>
<source>Voulez-vous vraiment supprimer cette facture ?
Cette action n&apos;est pas réversible.</source>
<translation>Do really want to delete this bill?
This action is irreversible.</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="191"/>
<source>Sélectionnez une fiche garantie</source>
<translation>Select a warranty card</translation>
</message>
<message>
<location filename="../infosproduitdialog.cpp" line="258"/>
<source>Voulez-vous vraiment supprimer cette fiche garantie ?
Cette action n&apos;est pas réversible.</source>
<translation>Do you really want to delete this warranty card?
This action is irreversible.</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="14"/>
<source>Gestionnaire de garanties Hermès</source>
<translation>Warranties manager Hermes</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="41"/>
<source>Fichier</source>
<translation>File</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="50"/>
<source>Aide</source>
<translation>Help</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="58"/>
<source>Outils</source>
<translation>Tools</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="88"/>
<source>Nouveau produit...</source>
<translation>New product...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="91"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="96"/>
<location filename="../mainwindow.cpp" line="195"/>
<source>Supprimer le produit</source>
<translation>Delete the product</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="99"/>
<source>Ctrl+D</source>
<translation>Ctrl+D</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="104"/>
<source>Gérer les magasins...</source>
<translation>Manage the shops...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="109"/>
<source>Centre d&apos;aide...</source>
<translation>Help center (currently only in French)...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="112"/>
<source>F1</source>
<translation>F1</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="117"/>
<source>À propos...</source>
<translation>About...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="122"/>
<source>Signaler un bug...</source>
<translation>Report a bug...</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="127"/>
<source>Préférences</source>
<translation>Preferences</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="40"/>
<source>Rechercher...</source>
<translation>Search...</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="101"/>
<source>Une nouvelle version (%1) est disponible !</source>
<comment>%1 represents the number of the new version (for instance: 0.4.1)</comment>
<translation>A new version (%1) is available!</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="102"/>
<source>Télécharger la nouvelle version</source>
<translation>Download the new version</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="168"/>
<source>Erreur</source>
<translation>Error</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="168"/>
<source>Aucun magasin ne semble avoir été enregistré.
Veuillez les enregistrer avant d&apos;entrer vos produits.</source>
<translation>It seems you have no shops currently.
Please enter your shops before to add your products.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="173"/>
<source>Nouveau produit</source>
<comment>Showed in the field &quot;Name&quot; in the product information window by default.</comment>
<translation>New product</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="195"/>
<source>Êtes-vous sûr de vouloir supprimer ce produit ?
Cette action n&apos;est pas réversible.</source>
<translation>Do really want to delete this product?
This action is irreversible.</translation>
</message>
<message numerus="yes">
<location filename="../mainwindow.cpp" line="292"/>
<source>%n produit(s) affiché(s).</source>
<translation>
<numerusform>%n product displayed</numerusform>
<numerusform>%n products displayed</numerusform>
</translation>
</message>
</context>
<context>
<name>ProduitItem</name>
<message>
<location filename="../produititem.ui" line="72"/>
<source>Plus d&apos;infos...</source>
<translation>More info...</translation>
</message>
<message>
<location filename="../produititem.cpp" line="41"/>
<source>Ouvre une fenêtre contenant toutes les informations
sur votre %1.</source>
<comment>%1 represents the name of the product, as given in the Name field.</comment>
<translation>Open a window containing all the information
about your %1.</translation>
</message>
<message>
<location filename="../produititem.cpp" line="124"/>
<source>Acheté le %1, fin de la garantie le %2</source>
<comment>%1 and %2 are dates</comment>
<translation>Bought on %1, your warranty ends on %2</translation>
</message>
<message>
<location filename="../produititem.cpp" line="126"/>
<source>Acheté le %1, garantie expirée</source>
<comment>%1 is a date</comment>
<translation>Bought on %1, warranty expired</translation>
</message>
<message>
<location filename="../produititem.cpp" line="129"/>
<source>Acheté le %1, garantie à vie</source>
<comment>%1 is a date</comment>
<translation>Bought on %1, warranty without end</translation>
</message>
<message>
<location filename="../produititem.cpp" line="132"/>
<source>
Parti en SAV</source>
<translation>Returned to the manufacturer</translation>
</message>
</context>
<context>
<name>ScannerDialog</name>
<message>
<location filename="../scannerdialog.ui" line="14"/>
<source>Numériser un document</source>
<translation>Digitize a document</translation>
</message>
<message>
<location filename="../scannerdialog.ui" line="26"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:xx-large; font-weight:600;&quot;&gt;Numériser un document&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:xx-large; font-weight:600;&quot;&gt;Digitize a document&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../scannerdialog.ui" line="39"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Cette fenêtre permet de numériser votre document rapidement.&lt;/p&gt;&lt;p&gt;Placez votre document dans votre scanner, puis cliquez sur le bouton &lt;span style=&quot; font-style:italic;&quot;&gt;Numériser&lt;/span&gt; ci-dessous. Vous pouvez également effectuer un essai pour vérifier que votre document est bien placé.&lt;/p&gt;&lt;p&gt;Remarque : la numérisation de test est effectuée en basse résolution. Elle ne sera pas enregistrée sur Hermès.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This window allows you to digitize your document quickly.&lt;/p&gt;&lt;p&gt;Put your document into your scanner, and click the button &lt;span style=&quot; font-style:italic;&quot;&gt;Digitize&lt;/span&gt; bellow. You can make a test to check that your document is well placed too.&lt;/p&gt;&lt;p&gt;Notice that the test digitization is done in low resolution. It will not be saved on Hermes.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../scannerdialog.ui" line="96"/>
<source>Test</source>
<translation>Test</translation>
</message>
<message>
<location filename="../scannerdialog.ui" line="103"/>
<source>Numériser</source>
<translation>Digitize</translation>
</message>
<message>
<location filename="../scannerdialog.ui" line="110"/>
<source>Annuler</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../scannerdialog.cpp" line="68"/>
<location filename="../scannerdialog.cpp" line="71"/>
<location filename="../scannerdialog.cpp" line="100"/>
<location filename="../scannerdialog.cpp" line="105"/>
<source>Erreur</source>
<translation>Error</translation>
</message>
<message>
<location filename="../scannerdialog.cpp" line="68"/>
<location filename="../scannerdialog.cpp" line="100"/>
<source>Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.
Erreur %1</source>
<translation>Your document could be digitized, but a problem has occured while processing it.
Error %1</translation>
</message>
<message>
<location filename="../scannerdialog.cpp" line="71"/>
<location filename="../scannerdialog.cpp" line="105"/>
<source>Impossible de communiquer avec votre scanner. Vérifiez qu&apos;il est bien relié à l&apos;ordinateur&apos; et qu&apos;il est sous tension, puis réessayez.
Si le problème persiste, il est probable que votre scanner ne soit pas pris en charge.</source>
<translation>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.</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.ui" line="14"/>
<source>Préférences</source>
<translation>Preferences</translation>
</message>
<message>
<location filename="../settingsdialog.ui" line="20"/>
<source>Lieu de sauvegarde</source>
<translation>Save place</translation>
</message>
<message>
<location filename="../settingsdialog.ui" line="29"/>
<source>Le lieu de sauvegarde actuel est :</source>
<translation>Your current save place is:</translation>
</message>
<message>
<location filename="../settingsdialog.ui" line="49"/>
<source>Changer l&apos;emplacement</source>
<translation>Set the save place</translation>
</message>
<message>
<location filename="../settingsdialog.ui" line="56"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Un dossier nommé &lt;span style=&quot; font-style:italic;&quot;&gt;deuchnord-hermes&lt;/span&gt; contenant vos données sera créé à l&apos;emplacement sélectionné.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A directory named &lt;span style=&quot; font-style:italic;&quot;&gt;deuchnord-hermes&lt;/span&gt; will be created with your data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="22"/>
<source>Choisir un dossier de sauvegarde</source>
<translation>Choose a save place</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="28"/>
<source>Confirmation</source>
<translation>Confirmation</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="28"/>
<source>Des fichiers appartenant à Hermès semblent être déjà présents. Que voulez-vous faire ?&lt;br /&gt;Cliquez sur &lt;em&gt;Appliquer&lt;/em&gt; pour utiliser les fichiers présents à cet emplacement.&lt;br /&gt;Cliquez sur &lt;em&gt;Réinitialiser&lt;/em&gt; pour écraser les fichiers présents à cet emplacement.&lt;br /&gt;Cliquez sur &lt;em&gt;Annuler&lt;/em&gt; pour ne pas changer l&apos;emplacement.</source>
<comment>The texts in italic should correspond to the texts on the buttons.</comment>
<translation>There are files that seem to belong to Hermes here. What do you want to do?&lt;br /&gt;Click &lt;em&gt;Apply&lt;/em&gt; to use the files on this place.&lt;br /&gt;Click &lt;em&gt;Reset&lt;/em&gt; to delete the files on this place.&lt;br /&gt;Click &lt;em&gt;Cancel&lt;/em&gt; to not change the place.</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="78"/>
<source>Certains changements dans votre configuration nécessitent de relancer Hermès.</source>
<translation>Some changes in your configuration need to restart Hermes.</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="80"/>
<source>
Attention, les changements effectués ne seront pas enregistrés !</source>
<translation>Caution, any changes will not be saved!</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="81"/>
<source>Mise à jour de la configuration</source>
<translation>Changing the configuration</translation>
</message>
</context>
</TS>

Loading…
Cancel
Save