diff --git a/oracle/CMakeLists.txt b/oracle/CMakeLists.txt index 2b6ea12cb..872b4d268 100644 --- a/oracle/CMakeLists.txt +++ b/oracle/CMakeLists.txt @@ -18,13 +18,22 @@ SET(oracle_SOURCES ../cockatrice/src/qt-json/json.cpp ) +if (UNIX AND NOT APPLE) + set_source_files_properties(src/main.cpp PROPERTIES COMPILE_FLAGS -DTRANSLATION_PATH=\\"${CMAKE_INSTALL_PREFIX}/share/oracle/translations\\") +endif (UNIX AND NOT APPLE) + set(oracle_RESOURCES oracle.qrc) +FILE(GLOB oracle_TS "${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts") + +IF(UPDATE_TRANSLATIONS) + FILE(GLOB_RECURSE translate_oracle_SRCS ${CMAKE_SOURCE_DIR}/oracle/src/*.cpp ${CMAKE_SOURCE_DIR}/oracle/src/*.h) + SET(translate_SRCS ${translate_oracle_SRCS}) +ENDIF(UPDATE_TRANSLATIONS) if(WIN32) set(oracle_SOURCES ${oracle_SOURCES} oracle.rc) endif(WIN32) - if(APPLE) set(MACOSX_BUNDLE_ICON_FILE appicon.icns) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) @@ -47,6 +56,12 @@ if(Qt4_FOUND) # Let cmake chew Qt4's translations and resource files # Note: header files are MOC-ed automatically by cmake + IF(UPDATE_TRANSLATIONS) + QT4_CREATE_TRANSLATION(oracle_QM ${translate_SRCS} ${oracle_TS}) + ELSE(UPDATE_TRANSLATIONS) + QT4_ADD_TRANSLATION(oracle_QM ${oracle_TS}) + ENDIF(UPDATE_TRANSLATIONS) + QT4_ADD_RESOURCES(oracle_RESOURCES_RCC ${oracle_RESOURCES}) endif() @@ -85,6 +100,12 @@ if(Qt5Widgets_FOUND) # Let cmake chew Qt5's translations and resource files # Note: header files are MOC-ed automatically by cmake + IF(UPDATE_TRANSLATIONS) + QT5_CREATE_TRANSLATION(oracle_QM ${translate_SRCS} ${oracle_TS}) + ELSE() + QT5_ADD_TRANSLATION(oracle_QM ${oracle_TS}) + ENDIF() + QT5_ADD_RESOURCES(oracle_RESOURCES_RCC ${oracle_RESOURCES}) # guess plugins and libraries directory @@ -105,7 +126,7 @@ ELSE() ENDIF() # Build oracle binary and link it -ADD_EXECUTABLE(oracle WIN32 MACOSX_BUNDLE ${oracle_SOURCES} ${oracle_RESOURCES_RCC} ${oracle_MOC_SRCS}) +ADD_EXECUTABLE(oracle WIN32 MACOSX_BUNDLE ${oracle_SOURCES} ${oracle_QM} ${oracle_RESOURCES_RCC} ${oracle_MOC_SRCS}) if(Qt4_FOUND) if(MSVC) @@ -134,14 +155,17 @@ if(UNIX) set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}) INSTALL(TARGETS oracle BUNDLE DESTINATION ./) + INSTALL(FILES ${oracle_QM} DESTINATION ./oracle.app/Contents/Resources/translations) else() # Assume linux INSTALL(TARGETS oracle RUNTIME DESTINATION bin/) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/oracle.png DESTINATION ${ICONDIR}/hicolor/48x48/apps) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/oracle.svg DESTINATION ${ICONDIR}/hicolor/scalable/apps) + INSTALL(FILES ${oracle_QM} DESTINATION share/oracle/translations) endif() elseif(WIN32) INSTALL(TARGETS oracle RUNTIME DESTINATION ./) + INSTALL(FILES ${oracle_QM} DESTINATION ./translations) endif() IF (NOT WIN32 AND NOT APPLE) diff --git a/oracle/src/main.cpp b/oracle/src/main.cpp index dcc5afdcc..9b462dd80 100644 --- a/oracle/src/main.cpp +++ b/oracle/src/main.cpp @@ -1,11 +1,33 @@ #include #include #include +#include +#include + +#include "main.h" #include "oraclewizard.h" #include "settingscache.h" +QTranslator *translator, *qtTranslator; SettingsCache *settingsCache; +const QString translationPrefix = "oracle"; +#ifdef TRANSLATION_PATH +QString translationPath = TRANSLATION_PATH; +#else +QString translationPath = QString(); +#endif + +void installNewTranslator() +{ + QString lang = settingsCache->getLang(); + + qtTranslator->load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + qApp->installTranslator(qtTranslator); + translator->load(translationPrefix + "_" + lang, translationPath); + qApp->installTranslator(translator); +} + int main(int argc, char *argv[]) { QApplication app(argc, argv); @@ -20,8 +42,20 @@ int main(int argc, char *argv[]) // this can't be changed, as it influences the default savepath for cards.xml QCoreApplication::setApplicationName("Cockatrice"); + if (translationPath.isEmpty()) { +#ifdef Q_OS_MAC + translationPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); +#elif defined(Q_OS_WIN) + translationPath = app.applicationDirPath() + "/translations"; +#endif + } + settingsCache = new SettingsCache; + qtTranslator = new QTranslator; + translator = new QTranslator; + installNewTranslator(); + OracleWizard wizard; QIcon icon(":/resources/appicon.svg"); diff --git a/oracle/src/main.h b/oracle/src/main.h new file mode 100644 index 000000000..e4b063eb5 --- /dev/null +++ b/oracle/src/main.h @@ -0,0 +1,12 @@ +#ifndef MAIN_H +#define MAIN_H + +class QTranslator; + +extern QTranslator *translator; +extern const QString translationPrefix; +extern QString translationPath; + +void installNewTranslator(); + +#endif diff --git a/oracle/src/oraclewizard.cpp b/oracle/src/oraclewizard.cpp index 75806bddf..ac9dd28b9 100644 --- a/oracle/src/oraclewizard.cpp +++ b/oracle/src/oraclewizard.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,8 @@ #include "oraclewizard.h" #include "oracleimporter.h" +#include "main.h" +#include "settingscache.h" #ifdef HAS_ZLIB #include "zip/unzip.h" @@ -40,6 +43,7 @@ OracleWizard::OracleWizard(QWidget *parent) : QWizard(parent) { settings = new QSettings(this); + connect(settingsCache, SIGNAL(langChanged()), this, SLOT(updateLanguage())); importer = new OracleImporter( #if QT_VERSION < 0x050000 @@ -54,8 +58,29 @@ OracleWizard::OracleWizard(QWidget *parent) addPage(new ChooseSetsPage); addPage(new SaveSetsPage); + retranslateUi(); +} + +void OracleWizard::updateLanguage() +{ + qApp->removeTranslator(translator); + installNewTranslator(); +} + +void OracleWizard::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + retranslateUi(); + QDialog::changeEvent(event); +} + +void OracleWizard::retranslateUi() +{ setWindowTitle(tr("Oracle Importer")); QWizard::setButtonText(QWizard::FinishButton, tr("Save")); + + for (int i = 0; i < pageIds().count(); i++) + dynamic_cast(page(i))->retranslateUi(); } void OracleWizard::accept() @@ -78,31 +103,66 @@ void OracleWizard::disableButtons() IntroPage::IntroPage(QWidget *parent) : OracleWizardPage(parent) { - setTitle(tr("Introduction")); - - label = new QLabel(tr("This wizard will import the list of sets and cards " - "that will be used by Cockatrice. You will need to " - "specify an url or a filename that will be used as a " - "source, and then choose the wanted sets from the list " - "of the available ones."), - this); + label = new QLabel(this); label->setWordWrap(true); - QVBoxLayout *layout = new QVBoxLayout(this); - layout->addWidget(label); + languageLabel = new QLabel(this); + languageBox = new QComboBox(this); + QString setLanguage = settingsCache->getLang(); + QStringList qmFiles = findQmFiles(); + for (int i = 0; i < qmFiles.size(); i++) { + QString langName = languageName(qmFiles[i]); + languageBox->addItem(langName, qmFiles[i]); + if ((qmFiles[i] == setLanguage) || (setLanguage.isEmpty() && langName == tr("English"))) + languageBox->setCurrentIndex(i); + } + connect(languageBox, SIGNAL(currentIndexChanged(int)), this, SLOT(languageBoxChanged(int))); + + QGridLayout *layout = new QGridLayout(this); + layout->addWidget(label, 0, 0, 1, 2); + layout->addWidget(languageLabel, 1, 0); + layout->addWidget(languageBox, 1, 1); + setLayout(layout); } +QStringList IntroPage::findQmFiles() +{ + QDir dir(translationPath); + QStringList fileNames = dir.entryList(QStringList(translationPrefix + "_*.qm"), QDir::Files, QDir::Name); + fileNames.replaceInStrings(QRegExp(translationPrefix + "_(.*)\\.qm"), "\\1"); + return fileNames; +} + +QString IntroPage::languageName(const QString &qmFile) +{ + QTranslator translator; + translator.load(translationPrefix + "_" + qmFile + ".qm", translationPath); + + return translator.translate("IntroPage", "English"); +} + +void IntroPage::languageBoxChanged(int index) +{ + settingsCache->setLang(languageBox->itemData(index).toString()); +} + +void IntroPage::retranslateUi() +{ + setTitle(tr("Introduction")); + label->setText(tr("This wizard will import the list of sets and cards " + "that will be used by Cockatrice.
You will need to " + "specify an url or a filename that will be used as a " + "source, and then choose the wanted sets from the list " + "of the available ones.")); + languageLabel->setText(tr("Language:")); +} + LoadSetsPage::LoadSetsPage(QWidget *parent) : OracleWizardPage(parent), nam(0) { - setTitle(tr("Source selection")); - setSubTitle(tr("Please specify a source for the list of sets and cards. " - "You can specify an url address that will be download or " - "use an existing file from your computer.")); - - urlRadioButton = new QRadioButton(tr("Download url:"), this); - fileRadioButton = new QRadioButton(tr("Local file:"), this); + urlRadioButton = new QRadioButton(this); + fileRadioButton = new QRadioButton(this); urlLineEdit = new QLineEdit(this); fileLineEdit = new QLineEdit(this); @@ -112,10 +172,10 @@ LoadSetsPage::LoadSetsPage(QWidget *parent) urlRadioButton->setChecked(true); - urlButton = new QPushButton(tr("Restore default url"), this); + urlButton = new QPushButton(this); connect(urlButton, SIGNAL(clicked()), this, SLOT(actRestoreDefaultUrl())); - fileButton = new QPushButton(tr("Choose file..."), this); + fileButton = new QPushButton(this); connect(fileButton, SIGNAL(clicked()), this, SLOT(actLoadSetsFile())); QGridLayout *layout = new QGridLayout(this); @@ -141,6 +201,19 @@ void LoadSetsPage::initializePage() progressBar->hide(); } +void LoadSetsPage::retranslateUi() +{ + setTitle(tr("Source selection")); + setSubTitle(tr("Please specify a source for the list of sets and cards. " + "You can specify an url address that will be download or " + "use an existing file from your computer.")); + + urlRadioButton->setText(tr("Download url:")); + fileRadioButton->setText(tr("Local file:")); + urlButton->setText(tr("Restore default url")); + fileButton->setText(tr("Choose file...")); +} + void LoadSetsPage::actRestoreDefaultUrl() { urlLineEdit->setText(ALLSETS_URL); @@ -356,11 +429,6 @@ void LoadSetsPage::importFinished() ChooseSetsPage::ChooseSetsPage(QWidget *parent) : OracleWizardPage(parent) { - setTitle(tr("Sets selection")); - setSubTitle(tr("The following sets has been found in the source file. " - "Please mark the sets that will be imported.\n" - "All core and expansion sets are selected by default.")); - checkBoxLayout = new QVBoxLayout; QWidget *checkboxFrame = new QWidget(this); @@ -370,9 +438,9 @@ ChooseSetsPage::ChooseSetsPage(QWidget *parent) checkboxArea->setWidget(checkboxFrame); checkboxArea->setWidgetResizable(true); - checkAllButton = new QPushButton(tr("&Check all")); + checkAllButton = new QPushButton(this); connect(checkAllButton, SIGNAL(clicked()), this, SLOT(actCheckAll())); - uncheckAllButton = new QPushButton(tr("&Uncheck all")); + uncheckAllButton = new QPushButton(this); connect(uncheckAllButton, SIGNAL(clicked()), this, SLOT(actUncheckAll())); QGridLayout *layout = new QGridLayout(this); @@ -400,6 +468,17 @@ void ChooseSetsPage::initializePage() } } +void ChooseSetsPage::retranslateUi() +{ + setTitle(tr("Sets selection")); + setSubTitle(tr("The following sets has been found in the source file. " + "Please mark the sets that will be imported.\n" + "All core and expansion sets are selected by default.")); + + checkAllButton->setText(tr("&Check all")); + uncheckAllButton->setText(tr("&Uncheck all")); +} + void ChooseSetsPage::checkBoxChanged(int state) { QCheckBox *checkBox = qobject_cast(sender()); @@ -438,12 +517,7 @@ bool ChooseSetsPage::validatePage() SaveSetsPage::SaveSetsPage(QWidget *parent) : OracleWizardPage(parent) { - setTitle(tr("Sets imported")); - setSubTitle(tr("The following sets has been imported. " - "Press \"Save\" to save the imported cards to the Cockatrice database.")); - defaultPathCheckBox = new QCheckBox(this); - defaultPathCheckBox->setText(tr("Save to the default path (recommended)")); defaultPathCheckBox->setChecked(true); messageLog = new QTextEdit(this); @@ -471,6 +545,15 @@ void SaveSetsPage::initializePage() QMessageBox::critical(this, tr("Error"), tr("No set has been imported.")); } +void SaveSetsPage::retranslateUi() +{ + setTitle(tr("Sets imported")); + setSubTitle(tr("The following sets has been imported. " + "Press \"Save\" to save the imported cards to the Cockatrice database.")); + + defaultPathCheckBox->setText(tr("Save to the default path (recommended)")); +} + void SaveSetsPage::updateTotalProgress(int cardsImported, int /* setIndex */, const QString &setName) { if (setName.isEmpty()) { diff --git a/oracle/src/oraclewizard.h b/oracle/src/oraclewizard.h index 94d361f70..e74edb6bb 100644 --- a/oracle/src/oraclewizard.h +++ b/oracle/src/oraclewizard.h @@ -7,6 +7,7 @@ class QCheckBox; class QGroupBox; +class QComboBox; class QLabel; class QLineEdit; class QRadioButton; @@ -25,9 +26,17 @@ public: void accept(); void enableButtons(); void disableButtons(); + void retranslateUi(); public: OracleImporter *importer; QSettings * settings; +private slots: + void updateLanguage(); +private: + QStringList findQmFiles(); + QString languageName(const QString &qmFile); +protected: + void changeEvent(QEvent *event); }; @@ -36,6 +45,7 @@ class OracleWizardPage : public QWizardPage Q_OBJECT public: OracleWizardPage(QWidget *parent = 0): QWizardPage(parent) {}; + virtual void retranslateUi() = 0; protected: inline OracleWizard *wizard() { return (OracleWizard*) QWizardPage::wizard(); }; }; @@ -44,9 +54,16 @@ class IntroPage : public OracleWizardPage { Q_OBJECT public: - IntroPage(QWidget *parent = 0); + IntroPage(QWidget *parent = 0); + void retranslateUi(); private: - QLabel *label; + QStringList findQmFiles(); + QString languageName(const QString &qmFile); +private: + QLabel *label, *languageLabel; + QComboBox *languageBox; +private slots: + void languageBoxChanged(int index); }; class LoadSetsPage : public OracleWizardPage @@ -54,6 +71,7 @@ class LoadSetsPage : public OracleWizardPage Q_OBJECT public: LoadSetsPage(QWidget *parent = 0); + void retranslateUi(); protected: void initializePage(); bool validatePage(); @@ -85,6 +103,7 @@ class ChooseSetsPage : public OracleWizardPage Q_OBJECT public: ChooseSetsPage(QWidget *parent = 0); + void retranslateUi(); protected: void initializePage(); bool validatePage(); @@ -103,6 +122,7 @@ class SaveSetsPage : public OracleWizardPage Q_OBJECT public: SaveSetsPage(QWidget *parent = 0); + void retranslateUi(); private: QTextEdit *messageLog; QCheckBox * defaultPathCheckBox; diff --git a/oracle/translations/oracle_en.ts b/oracle/translations/oracle_en.ts new file mode 100644 index 000000000..54c9181f4 --- /dev/null +++ b/oracle/translations/oracle_en.ts @@ -0,0 +1,330 @@ + + + + + ChooseSetsPage + + Sets selection + + + + The following sets has been found in the source file. Please mark the sets that will be imported. +All core and expansion sets are selected by default. + + + + &Check all + + + + &Uncheck all + + + + Error + + + + Please mark at least one set. + + + + + IntroPage + + Introduction + + + + English + English + + + Language: + + + + This wizard will import the list of sets and cards that will be used by Cockatrice.<br/>You will need to specify an url or a filename that will be used as a source, and then choose the wanted sets from the list of the available ones. + + + + + LoadSetsPage + + Source selection + + + + Please specify a source for the list of sets and cards. You can specify an url address that will be download or use an existing file from your computer. + + + + Download url: + + + + Local file: + + + + Restore default url + + + + Choose file... + + + + Load sets file + + + + Sets JSON file (*.json *.zip) + + + + Sets JSON file (*.json) + + + + Error + + + + The provided url is not valid. + + + + Downloading (0MB) + + + + Please choose a file. + + + + Cannot open file '%1'. + + + + Downloading (%1MB) + + + + Network error: %1. + + + + Parsing file + + + + Failed to open Zip archive: %1. + + + + Zip extraction failed: the Zip archive doesn't contain exactly one file. + + + + Zip extraction failed: %1. + + + + Sorry, this version of Oracle does not support zipped files. + + + + Do you want to try to download a fresh copy of the uncompressed file instead? + + + + The file was retrieved successfully, but it does not contain any sets data. + + + + + OracleImporter + + Dummy set containing tokens + + + + + OracleWizard + + Oracle Importer + + + + Save + + + + + SaveSetsPage + + Sets imported + + + + The following sets has been imported. Press "Save" to save the imported cards to the Cockatrice database. + + + + Save to the default path (recommended) + + + + Error + + + + No set has been imported. + + + + Import finished: %1 cards. + + + + %1: %2 cards imported + + + + Save card database + + + + XML; card database (*.xml) + + + + Success + + + + The card database has been saved successfully to +%1 + + + + The file could not be saved to %1 + + + + + UnZip + + ZIP operation completed successfully. + + + + Failed to initialize or load zlib library. + + + + zlib library error. + + + + Unable to create or open file. + + + + Partially corrupted archive. Some files might be extracted. + + + + Corrupted archive. + + + + Wrong password. + + + + No archive has been created yet. + + + + File or directory does not exist. + + + + File read error. + + + + File write error. + + + + File seek error. + + + + Unable to create a directory. + + + + Invalid device. + + + + Invalid or incompatible zip archive. + + + + Inconsistent headers. Archive might be corrupted. + + + + Unknown error. + + + + + Zip + + ZIP operation completed successfully. + + + + Failed to initialize or load zlib library. + + + + zlib library error. + + + + Unable to create or open file. + + + + No archive has been created yet. + + + + File or directory does not exist. + + + + File read error. + + + + File write error. + + + + File seek error. + + + + Unknown error. + + + + diff --git a/oracle/translations/oracle_it.ts b/oracle/translations/oracle_it.ts new file mode 100644 index 000000000..bc4bbdd39 --- /dev/null +++ b/oracle/translations/oracle_it.ts @@ -0,0 +1,332 @@ + + + + + ChooseSetsPage + + Sets selection + Selezione dei set + + + The following sets has been found in the source file. Please mark the sets that will be imported. +All core and expansion sets are selected by default. + I seguenti set sono stati trovati nel file. Seleziona i set che verranno importati. +Tutti i set base e le espansioni sono selezionate di default. + + + &Check all + Seleziona tutti + + + &Uncheck all + Deseleziona tutti + + + Error + Errore + + + Please mark at least one set. + Seleziona perlomeno un set. + + + + IntroPage + + Introduction + Introduzione + + + English + Italiano + + + Language: + Lingua: + + + This wizard will import the list of sets and cards that will be used by Cockatrice.<br/>You will need to specify an url or a filename that will be used as a source, and then choose the wanted sets from the list of the available ones. + Questo wizard importerà la lista dei set e delle carte che verranno usate da Cockatrice.<br/>Dovrai specificare un indirizzo url o il nome di un file che verrà utilizzato come sorgente, e poi selezionare i set dalla lista di quelli disponibili. + + + + LoadSetsPage + + Source selection + Selezione sorgente + + + Please specify a source for the list of sets and cards. You can specify an url address that will be download or use an existing file from your computer. + Specifica una sorgente per la lista dei set e delle carte. Puoi specificare un indirizzo url da cui scaricare il file o alternativamente usare un file già presente nel tuo computer. + + + Download url: + Indirizzo download: + + + Local file: + File nel pc: + + + Restore default url + Usa l'indirizzo predefinito + + + Choose file... + Scegli file... + + + Load sets file + Carica file dei set + + + Sets JSON file (*.json *.zip) + File dei set JSON (*.json *.zip) + + + Sets JSON file (*.json) + File set set JSON (*.json) + + + Error + Errore + + + The provided url is not valid. + L'indirizzo specificato non è valido. + + + Downloading (0MB) + Scaricamento (0MB) + + + Please choose a file. + Selezina un file. + + + Cannot open file '%1'. + Impossibile aprire il file '%1'. + + + Downloading (%1MB) + Scaricamento (%1MB) + + + Network error: %1. + Errore di rete: %1 + + + Parsing file + Analisi dei file + + + Failed to open Zip archive: %1. + Impossibile aprire il file Zip: %1 + + + Zip extraction failed: the Zip archive doesn't contain exactly one file. + Estrazione file Zip fallita: lo Zip non contiene un solo file. + + + Zip extraction failed: %1. + Estrazione file Zip fallita: %1 + + + Sorry, this version of Oracle does not support zipped files. + Spiacente, ma questa versione di Oracle non supporta in file zippati. + + + Do you want to try to download a fresh copy of the uncompressed file instead? + Vuoi provare a riscaricare un copia pulita del file non zippato? + + + The file was retrieved successfully, but it does not contain any sets data. + Il file è stato analizzato correttamente, ma non contiene i dati di nessun set. + + + + OracleImporter + + Dummy set containing tokens + Set finto contenente i token + + + + OracleWizard + + Oracle Importer + Oracle Importer + + + Save + Salva + + + + SaveSetsPage + + Sets imported + Set importati + + + The following sets has been imported. Press "Save" to save the imported cards to the Cockatrice database. + I seguenti set sono stati importati. Premi "Salva" per salvare le carte importate nell'archivio di Cockatrice. + + + Save to the default path (recommended) + Salva nel percorso predefinito (raccomandato) + + + Error + Errore + + + No set has been imported. + Nessun set importato. + + + Import finished: %1 cards. + Importazione conclusa: %1 carte. + + + %1: %2 cards imported + %1: %2 carte importate + + + Save card database + Salva archivio carte + + + XML; card database (*.xml) + XML; archivio carte (*.xml) + + + Success + Successo + + + The card database has been saved successfully to +%1 + L'archivio delle carte è stato salvato correttamente su +%1 + + + The file could not be saved to %1 + Impossibile salvare il file su %1 + + + + UnZip + + ZIP operation completed successfully. + Operazione ZIP completata con successo. + + + Failed to initialize or load zlib library. + Impossibile caricare le libreria zlib. + + + zlib library error. + errore libreria zlib. + + + Unable to create or open file. + Impossibile creare o aprire il file. + + + Partially corrupted archive. Some files might be extracted. + Archivio parzialmente danneggiato. Alcuni file potrebbero essere stati estratti. + + + Corrupted archive. + Archivio danneggiato. + + + Wrong password. + Password sbagliata. + + + No archive has been created yet. + L'archivio non è ancora stato creato. + + + File or directory does not exist. + Il file o la cartella non esiste. + + + File read error. + Errore di lettura del file. + + + File write error. + Errore di scrittura del file. + + + File seek error. + Errore di ricerca nel file. + + + Unable to create a directory. + Impossibile creare una cartella. + + + Invalid device. + Dispositivo non valido. + + + Invalid or incompatible zip archive. + Archivio zip non valido o incompatibile. + + + Inconsistent headers. Archive might be corrupted. + Intestazioni inconsistenti. L'archivio potrebbe essere danneggiato. + + + Unknown error. + Errore sconosciuto. + + + + Zip + + ZIP operation completed successfully. + Operazione ZIP completata con successo. + + + Failed to initialize or load zlib library. + Impossibile caricare le libreria zlib. + + + zlib library error. + errore libreria zlib. + + + Unable to create or open file. + Impossibile creare o aprire il file. + + + No archive has been created yet. + L'archivio non è ancora stato creato. + + + File or directory does not exist. + Il file o la cartella non esiste. + + + File read error. + Errore di lettura del file. + + + File write error. + Errore di scrittura del file. + + + File seek error. + Errore di ricerca nel file. + + + Unknown error. + Errore sconosciuto. + + +