diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 715c43959..4b45ff610 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -8,6 +8,11 @@
+### How often does this problem occur?
+
+
+
+
### What version of the program are you using? On what operating system?
diff --git a/CrashReporter/CrashReporter.pro b/CrashReporter/CrashReporter.pro
index 53b07d9b3..1c183ca43 100755
--- a/CrashReporter/CrashReporter.pro
+++ b/CrashReporter/CrashReporter.pro
@@ -17,4 +17,5 @@ TRANSLATIONS += languages/English.ts \
languages/French.ts \
languages/ChineseSimplified.ts \
languages/Russian.ts \
+ languages/Spanish.ts \
languages/YourLanguage.ts
diff --git a/CrashReporter/languages/Spanish.ts b/CrashReporter/languages/Spanish.ts
new file mode 100644
index 000000000..59f015c53
--- /dev/null
+++ b/CrashReporter/languages/Spanish.ts
@@ -0,0 +1,57 @@
+
+
+
+
+ MainWindow
+
+
+
+ Reporte de errores
+
+
+
+
+ Lo sentimos
+
+
+
+
+ Grabber ha encontrado un problema y cerrado inesperadamente. El programa intentará restaurar sus pestañas y configuraciones cuando reinicie.
+
+
+
+
+ Para ayudarnos a resolver este error, puedes enviarnos un reporte de error.
+
+
+
+
+ Enviar un reporte de error
+
+
+
+
+ Registros
+
+
+
+
+ Configuraciones
+
+
+
+
+ Vaciado
+
+
+
+
+ Reiniciar
+
+
+
+
+ Cerrar
+
+
+
diff --git a/Grabber.pri b/Grabber.pri
index 7e455bb08..2606bbcb4 100644
--- a/Grabber.pri
+++ b/Grabber.pri
@@ -16,7 +16,7 @@ RCC_DIR = $$DESTDIR/qrc
UI_DIR = $$DESTDIR/ui
# Global
-APP_VERSION = \\\"5.2.2\\\"
+APP_VERSION = \\\"5.2.3\\\"
APP_PREFIX = \\\"$$(PREFIX)\\\"
# General
@@ -34,6 +34,7 @@ TRANSLATIONS += $${PWD}/languages/English.ts \
$${PWD}/languages/French.ts \
$${PWD}/languages/Russian.ts \
$${PWD}/languages/ChineseSimplified.ts \
+ $${PWD}/languages/Spanish.ts \
$${PWD}/languages/YourLanguage.ts
# Target WinXP
diff --git a/README.md b/README.md
index 3ce732ea8..e22a2698f 100755
--- a/README.md
+++ b/README.md
@@ -46,6 +46,7 @@ You can download the latest release [here](https://github.com/Bionus/imgbrd-grab
* French
* Russian
* Chinese (simplified)
+* Spanish
## Default sources
You can add additional sources very easily, but here's a shot list of some sources that are included and supported by default: Danbooru, Gelbooru, yande.re, Shimmie, Sankaku complex, e621, Konachan, rule34, safebooru, behoimi, Zerochan...
diff --git a/gui/src/batch/batchwindow.ui b/gui/src/batch/batchwindow.ui
index 4abd97092..bce253163 100644
--- a/gui/src/batch/batchwindow.ui
+++ b/gui/src/batch/batchwindow.ui
@@ -46,7 +46,7 @@
0
- %p%
+ %p%
diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp
index f0a78b382..333af4701 100644
--- a/gui/src/mainwindow.cpp
+++ b/gui/src/mainwindow.cpp
@@ -34,6 +34,7 @@
#include "helpers.h"
#include "downloader/download-query-loader.h"
#include "tabs/tabs-loader.h"
+#include "theme-loader.h"
@@ -48,9 +49,6 @@ void mainWindow::init(QStringList args, QMap params)
m_settings->setValue("crashed", true);
m_settings->sync();
- loadLanguage(m_settings->value("language", "English").toString(), true);
- ui->setupUi(this);
-
m_showLog = m_settings->value("Log/show", true).toBool();
if (!m_showLog)
{ ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabLog)); }
@@ -60,6 +58,36 @@ void mainWindow::init(QStringList args, QMap params)
log(QString("Path: %1").arg(qApp->applicationDirPath()));
log(QString("Loading preferences from %1").arg(m_settings->fileName()));
+ ThemeLoader themeLoader(savePath("themes/", true));
+ themeLoader.setTheme(m_settings->value("theme", "Default").toString());
+ ui->setupUi(this);
+
+ // On first launch after setup, we restore the setup's language
+ QString setupSettingsFile = savePath("innosetup.ini");
+ if (QFile::exists(setupSettingsFile))
+ {
+ QSettings setupSettings(setupSettingsFile, QSettings::IniFormat);
+ QString setupLanguage = setupSettings.value("language", "en").toString();
+
+ QSettings associations(savePath("languages/languages.ini"), QSettings::IniFormat);
+ associations.beginGroup("innosetup");
+ QStringList keys = associations.childKeys();
+
+ // Only if the setup language is available in Grabber
+ if (keys.contains(setupLanguage))
+ {
+ m_settings->setValue("language", associations.value(setupLanguage).toString());
+ }
+
+ // Remove the setup settings file to not do this every time
+ QFile::remove(setupSettingsFile);
+ }
+
+ // Load translations
+ qApp->installTranslator(&m_translator);
+ qApp->installTranslator(&m_qtTranslator);
+ loadLanguage(m_settings->value("language", "English").toString());
+
tabifyDockWidget(ui->dock_internet, ui->dock_wiki);
tabifyDockWidget(ui->dock_wiki, ui->dock_kfl);
tabifyDockWidget(ui->dock_kfl, ui->dock_favorites);
@@ -123,8 +151,6 @@ void mainWindow::init(QStringList args, QMap params)
ui->actionQuit->setShortcut(QKeySequence::Quit);
ui->actionFolder->setShortcut(QKeySequence::Open);
- loadLanguage(m_settings->value("language", "English").toString());
-
connect(ui->actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(ui->actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
@@ -165,6 +191,7 @@ void mainWindow::init(QStringList args, QMap params)
m_favoritesTab = new favoritesTab(&m_sites, m_profile, this);
connect(m_favoritesTab, &searchTab::batchAddGroup, this, &mainWindow::batchAddGroup);
connect(m_favoritesTab, SIGNAL(batchAddUnique(DownloadQueryImage)), this, SLOT(batchAddUnique(DownloadQueryImage)));
+ connect(m_favoritesTab, &searchTab::titleChanged, this, &mainWindow::updateTabTitle);
connect(m_favoritesTab, &searchTab::changed, this, &mainWindow::updateTabs);
ui->tabWidget->insertTab(m_tabs.size(), m_favoritesTab, tr("Favorites"));
ui->tabWidget->setCurrentIndex(0);
@@ -225,7 +252,7 @@ void mainWindow::init(QStringList args, QMap params)
// Check for updates
int cfuInterval = m_settings->value("check_for_updates", 24*60*60).toInt();
QDateTime lastCfu = m_settings->value("last_check_for_updates", QDateTime()).toDateTime();
- if (cfuInterval > 0 && (!lastCfu.isValid() || lastCfu.addSecs(cfuInterval) <= QDateTime::currentDateTime()))
+ if (cfuInterval >= 0 && (!lastCfu.isValid() || lastCfu.addSecs(cfuInterval) <= QDateTime::currentDateTime()))
{
m_settings->setValue("last_check_for_updates", QDateTime::currentDateTime());
@@ -490,8 +517,11 @@ bool mainWindow::loadTabs(QString filename)
m_tagTabs.append(tagTabs);
m_poolTabs.append(poolTabs);
- ui->tabWidget->setCurrentIndex(currentTab);
- m_forcedTab = true;
+ if (currentTab >= 0)
+ {
+ ui->tabWidget->setCurrentIndex(currentTab);
+ m_forcedTab = true;
+ }
return true;
}
@@ -938,12 +968,6 @@ void mainWindow::logClear()
void mainWindow::logOpen()
{ QDesktopServices::openUrl("file:///" + m_profile->getPath() + "/main.log"); }
-void mainWindow::switchTranslator(QTranslator& translator, const QString& filename)
-{
- qApp->removeTranslator(&translator);
- if (translator.load(filename))
- { qApp->installTranslator(&translator); }
-}
void mainWindow::loadLanguage(const QString& rLanguage, bool shutup)
{
if (m_currLang != rLanguage)
@@ -951,7 +975,10 @@ void mainWindow::loadLanguage(const QString& rLanguage, bool shutup)
m_currLang = rLanguage;
QLocale locale = QLocale(m_currLang);
QLocale::setDefault(locale);
- switchTranslator(m_translator, savePath("languages/"+m_currLang+".qm", true));
+
+ m_translator.load(savePath("languages/"+m_currLang+".qm", true));
+ m_qtTranslator.load(savePath("languages/qt/"+m_currLang+".qm", true));
+
if (!shutup)
{
log(QString("Translating texts in %1...").arg(m_currLang));
@@ -1122,6 +1149,7 @@ void mainWindow::getAll(bool all)
m_getAllFailed.clear();
m_getAllDownloading.clear();
m_getAllSkippedImages.clear();
+ m_batchPending.clear();
QList selected = ui->tableBatchUniques->selectedItems();
int count = selected.size();
@@ -1271,6 +1299,10 @@ void mainWindow::getAllFinishedLogins()
int imagesPerPack = pagesPerPack * b.perpage;
int packs = qCeil((float)b.total / imagesPerPack);
+ int lastPageImages = b.total % imagesPerPack;
+ if (lastPageImages == 0)
+ lastPageImages = imagesPerPack;
+
for (int i = 0; i < packs; ++i)
{
Downloader *downloader = new Downloader(m_profile,
@@ -1278,7 +1310,7 @@ void mainWindow::getAllFinishedLogins()
QStringList(),
QList() << b.site,
b.page + i * pagesPerPack,
- (i == packs - 1 ? b.total % imagesPerPack : imagesPerPack),
+ (i == packs - 1 ? lastPageImages : imagesPerPack),
b.perpage,
b.path,
b.filename,
@@ -1728,7 +1760,7 @@ void mainWindow::getAllGetImage(QSharedPointer img)
{
if (whatToDo == "copy")
{
- m_getAllIgnored++;
+ m_getAllDownloaded++;
log(QString("Copy from %1 vers %2").arg(md5Duplicate).arg(fp));
QFile::copy(md5Duplicate, fp);
@@ -1747,7 +1779,7 @@ void mainWindow::getAllGetImage(QSharedPointer img)
}
else
{
- m_getAllIgnored++;
+ m_getAllExists++;
log(QString("MD5 \"%1\" of the image %2 already found in file %3").arg(img->md5(), img->url(), md5Duplicate));
}
}
@@ -1996,6 +2028,7 @@ void mainWindow::getAllFinished()
int pos = i - rem;
m_progressBars[pos]->deleteLater();
m_progressBars.removeAt(pos);
+ m_groupBatchs.removeAt(pos);
ui->tableBatchGroups->removeRow(pos);
rem++;
}
diff --git a/gui/src/mainwindow.h b/gui/src/mainwindow.h
index 0b4fede3d..eadff3678 100644
--- a/gui/src/mainwindow.h
+++ b/gui/src/mainwindow.h
@@ -67,7 +67,6 @@ class mainWindow : public QMainWindow
void md5FixOpen();
void renameExisting();
// Language
- void switchTranslator(QTranslator&, const QString&);
void loadLanguage(const QString&, bool shutup = false);
void changeEvent(QEvent*);
// Favorites
@@ -194,7 +193,7 @@ class mainWindow : public QMainWindow
QSettings *m_settings;
batchWindow *m_progressdialog;
QString m_currLang, m_link;
- QTranslator m_translator;
+ QTranslator m_translator, m_qtTranslator;
QList m_groupBatchs;
QList> m_getAllRemaining, m_getAllDownloading, m_getAllFailed, m_images, m_getAllSkippedImages;
QWidget *m_currentTab;
diff --git a/gui/src/settings/optionswindow.cpp b/gui/src/settings/optionswindow.cpp
index 198b2b4e8..8c99044fd 100644
--- a/gui/src/settings/optionswindow.cpp
+++ b/gui/src/settings/optionswindow.cpp
@@ -15,6 +15,7 @@
#include "functions.h"
#include "helpers.h"
#include "language-loader.h"
+#include "theme-loader.h"
@@ -198,6 +199,13 @@ optionsWindow::optionsWindow(Profile *profile, QWidget *parent)
ui->layoutCustom->insertRow(i, leName, leTags);
}
+ // Themes
+ ThemeLoader themeLoader(savePath("themes/", true));
+ QStringList themes = themeLoader.getAllThemes();
+ for (QString theme : themes)
+ { ui->comboTheme->addItem(theme, theme); }
+ ui->comboTheme->setCurrentText(settings->value("theme", "Default").toString());
+
QStringList positions = QStringList() << "top" << "left" << "auto";
ui->comboTagsPosition->setCurrentIndex(positions.indexOf(settings->value("tagsposition", "top").toString()));
ui->spinPreload->setValue(settings->value("preload", 0).toInt());
@@ -691,6 +699,12 @@ void optionsWindow::save()
settings->endGroup();
settings->endGroup();
+ // Themes
+ QString theme = ui->comboTheme->currentText();
+ ThemeLoader themeLoader(savePath("themes/", true));
+ if (themeLoader.setTheme(theme))
+ { settings->setValue("theme", theme); }
+
QStringList positions = QStringList() << "top" << "left" << "auto";
settings->setValue("tagsposition", positions.at(ui->comboTagsPosition->currentIndex()));
settings->setValue("preload", ui->spinPreload->value());
diff --git a/gui/src/settings/optionswindow.ui b/gui/src/settings/optionswindow.ui
index a469badfa..052f7555c 100644
--- a/gui/src/settings/optionswindow.ui
+++ b/gui/src/settings/optionswindow.ui
@@ -14,7 +14,7 @@
Options
-
+
:/images/icon.ico:/images/icon.ico
@@ -1548,14 +1548,14 @@
QFormLayout::AllNonFixedFieldsGrow
- -
+
-
Use a scroll area for the results
- -
+
-
Resize previews instead of cropping them
@@ -1565,14 +1565,14 @@
- -
+
-
Upscaling
- -
+
-
%
@@ -1585,7 +1585,7 @@
- -
+
-
Enable autocompletion
@@ -1595,14 +1595,14 @@
- -
+
-
Favorites display
- -
+
-
-
@@ -1641,14 +1641,14 @@
- -
+
-
Hide favorites
- -
+
-
1000
@@ -1658,7 +1658,7 @@
- -
+
-
<i>The favorites list will be hidden as soon as this image number has been reached.</i>
@@ -1668,14 +1668,14 @@
- -
+
-
Source's type display
- -
+
-
-
@@ -1699,14 +1699,14 @@
- -
+
-
Displayed letters
- -
+
-
-
@@ -1742,7 +1742,7 @@
- -
+
-
<i>Number of displayed letters near the sources' checkboxes in the "+" part of the main window.</i>
@@ -1752,7 +1752,7 @@
- -
+
-
Show warning if an incompatible modifier is found
@@ -1762,7 +1762,7 @@
- -
+
-
Show other warnings
@@ -1772,14 +1772,14 @@
- -
+
-
Download not loaded pages
- -
+
-
<i>If you activate this option, pressing the "Get this page" button will take into account modifications made to the number of images per page, the page number, etc. even if they weren't loaded.</i>
@@ -1789,6 +1789,16 @@
+ -
+
+
+ Theme
+
+
+
+ -
+
+
@@ -2858,7 +2868,10 @@
checkAutocompletion
-
+
+
+
+
diff --git a/gui/src/tabs/favorites-tab.cpp b/gui/src/tabs/favorites-tab.cpp
index 07080ff86..2208aab94 100644
--- a/gui/src/tabs/favorites-tab.cpp
+++ b/gui/src/tabs/favorites-tab.cpp
@@ -321,3 +321,17 @@ void favoritesTab::favoriteProperties(QString name)
void favoritesTab::focusSearch()
{ }
+
+
+void favoritesTab::changeEvent(QEvent *event)
+{
+ // Automatically retranslate this tab on language change
+ if (event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ setWindowTitle(tr("Favorites"));
+ emit titleChanged(this);
+ }
+
+ QWidget::changeEvent(event);
+}
diff --git a/gui/src/tabs/favorites-tab.h b/gui/src/tabs/favorites-tab.h
index 76e54ce72..3ada1e6a3 100644
--- a/gui/src/tabs/favorites-tab.h
+++ b/gui/src/tabs/favorites-tab.h
@@ -32,6 +32,9 @@ class favoritesTab : public searchTab
QList loadSites() const override;
void write(QJsonObject &json) const override;
+ protected:
+ void changeEvent(QEvent *event) override;
+
public slots:
// Zooms
void setTags(QString);
diff --git a/gui/src/tabs/pool-tab.cpp b/gui/src/tabs/pool-tab.cpp
index 6ba9ada04..faca05ad4 100644
--- a/gui/src/tabs/pool-tab.cpp
+++ b/gui/src/tabs/pool-tab.cpp
@@ -199,3 +199,15 @@ void poolTab::focusSearch()
QString poolTab::tags() const
{ return m_search->toPlainText(); }
+
+
+void poolTab::changeEvent(QEvent *event)
+{
+ // Automatically retranslate this tab on language change
+ if (event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+
+ QWidget::changeEvent(event);
+}
diff --git a/gui/src/tabs/pool-tab.h b/gui/src/tabs/pool-tab.h
index 485f177ad..54172400a 100644
--- a/gui/src/tabs/pool-tab.h
+++ b/gui/src/tabs/pool-tab.h
@@ -32,6 +32,9 @@ class poolTab : public searchTab
void write(QJsonObject &json) const override;
bool read(const QJsonObject &json);
+ protected:
+ void changeEvent(QEvent *event) override;
+
public slots:
// Zooms
void setTags(QString);
diff --git a/gui/src/tabs/tag-tab.cpp b/gui/src/tabs/tag-tab.cpp
index 73fc9e505..f5a64ead5 100644
--- a/gui/src/tabs/tag-tab.cpp
+++ b/gui/src/tabs/tag-tab.cpp
@@ -234,3 +234,15 @@ void tagTab::focusSearch()
QString tagTab::tags() const
{ return m_search->toPlainText(); }
+
+
+void tagTab::changeEvent(QEvent *event)
+{
+ // Automatically retranslate this tab on language change
+ if (event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this);
+ }
+
+ QWidget::changeEvent(event);
+}
diff --git a/gui/src/tabs/tag-tab.h b/gui/src/tabs/tag-tab.h
index 20c4a54a2..f350d096d 100644
--- a/gui/src/tabs/tag-tab.h
+++ b/gui/src/tabs/tag-tab.h
@@ -36,6 +36,9 @@ class tagTab : public searchTab
void write(QJsonObject &json) const override;
bool read(const QJsonObject &json);
+ protected:
+ void changeEvent(QEvent *event) override;
+
public slots:
// Zooms
void setTags(QString);
diff --git a/gui/src/theme-loader.cpp b/gui/src/theme-loader.cpp
new file mode 100644
index 000000000..a15a68146
--- /dev/null
+++ b/gui/src/theme-loader.cpp
@@ -0,0 +1,26 @@
+#include "theme-loader.h"
+#include
+#include
+
+
+ThemeLoader::ThemeLoader(QString path)
+ : m_path(path)
+{}
+
+QStringList ThemeLoader::getAllThemes() const
+{
+ return QDir(m_path).entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+}
+
+
+bool ThemeLoader::setTheme(QString name)
+{
+ QFile f(m_path + "/" + name + "/style.css");
+ if (!f.open(QFile::ReadOnly | QFile::Text))
+ return false;
+
+ QString css = f.readAll();
+ f.close();
+ qApp->setStyleSheet(css);
+ return true;
+}
diff --git a/gui/src/theme-loader.h b/gui/src/theme-loader.h
new file mode 100644
index 000000000..6953bde78
--- /dev/null
+++ b/gui/src/theme-loader.h
@@ -0,0 +1,19 @@
+#ifndef THEME_LOADER_H
+#define THEME_LOADER_H
+
+#include
+#include
+
+
+class ThemeLoader
+{
+ public:
+ ThemeLoader(QString path);
+ QStringList getAllThemes() const;
+ bool setTheme(QString name);
+
+ private:
+ QString m_path;
+};
+
+#endif // THEME_LOADER_H
diff --git a/gui/src/ui/verticalscrollarea.cpp b/gui/src/ui/verticalscrollarea.cpp
index 8e0b8dfd8..0b8dec1ef 100644
--- a/gui/src/ui/verticalscrollarea.cpp
+++ b/gui/src/ui/verticalscrollarea.cpp
@@ -35,7 +35,6 @@ void VerticalScrollArea::updateWidgetSize()
maxWidth -= verticalScrollBar()->width();
widget()->setMaximumWidth(maxWidth);
- if (!m_scrollEnabled)
- widget()->setMaximumHeight(height());
+ widget()->setMaximumHeight(m_scrollEnabled ? QWIDGETSIZE_MAX : height());
}
}
diff --git a/gui/src/updater/update-dialog.cpp b/gui/src/updater/update-dialog.cpp
index e9673b213..eb1c8213a 100644
--- a/gui/src/updater/update-dialog.cpp
+++ b/gui/src/updater/update-dialog.cpp
@@ -1,5 +1,6 @@
#include
#include
+#include
#include "update-dialog.h"
#include "ui_update-dialog.h"
@@ -51,7 +52,12 @@ void UpdateDialog::checkForUpdatesDone(QString newVersion, bool available, QStri
void UpdateDialog::accept()
{
- downloadUpdate();
+ #ifdef Q_OS_WIN
+ downloadUpdate();
+ #else
+ QDesktopServices::openUrl(m_updater.latestUrl());
+ close();
+ #endif
}
diff --git a/gui/src/updater/update-dialog.ui b/gui/src/updater/update-dialog.ui
index fbc34ec5b..1897ac3f5 100644
--- a/gui/src/updater/update-dialog.ui
+++ b/gui/src/updater/update-dialog.ui
@@ -61,6 +61,9 @@
{ changelog }
+
+ true
+
-
diff --git a/gui/src/utils/md5-fix/md5-fix.cpp b/gui/src/utils/md5-fix/md5-fix.cpp
index 23295c789..7a25a2311 100644
--- a/gui/src/utils/md5-fix/md5-fix.cpp
+++ b/gui/src/utils/md5-fix/md5-fix.cpp
@@ -75,16 +75,6 @@ void md5Fix::on_buttonStart_clicked()
ui->progressBar->setMaximum(files.size());
ui->progressBar->show();
- // Open MD5 file
- QFile f(m_profile->getPath() + "/md5s.txt");
- if (!f.open(QFile::WriteOnly | QFile::Truncate))
- {
- error(this, tr("Unable to open the MD5 file."));
- ui->progressBar->hide();
- ui->buttonStart->setEnabled(true);
- return;
- }
-
// Parse all files
for (QStringPair file : files)
{
@@ -118,10 +108,9 @@ void md5Fix::on_buttonStart_clicked()
}
}
if (!md5.isEmpty())
- { f.write(QString(md5 + file.second + "\n").toUtf8()); }
+ { m_profile->addMd5(md5, file.second); }
ui->progressBar->setValue(ui->progressBar->value() + 1);
}
- f.close();
}
// Hide progresss bar
diff --git a/gui/src/viewer/zoomwindow.cpp b/gui/src/viewer/zoomwindow.cpp
index 5f90af58c..065c9cc7e 100644
--- a/gui/src/viewer/zoomwindow.cpp
+++ b/gui/src/viewer/zoomwindow.cpp
@@ -192,8 +192,11 @@ zoomWindow::~zoomWindow()
m_labelTagsLeft->deleteLater();
m_detailsWindow->deleteLater();
+ // Quit threads
+ m_imageLoaderQueueThread.quit();
+ m_imageLoaderThread.wait(1000);
m_imageLoaderThread.quit();
- m_imageLoaderThread.wait(100);
+ m_imageLoaderThread.wait(1000);
delete ui;
}
@@ -486,7 +489,10 @@ void zoomWindow::display(const QPixmap &pix, int size)
update(!m_finished);
if (!pix.size().isEmpty() && m_image->size().isEmpty())
- { m_image->setSize(pix.size()); }
+ {
+ m_image->setSize(pix.size());
+ updateWindowTitle();
+ }
if (m_isFullscreen && m_fullScreen != nullptr && m_fullScreen->isVisible())
{ m_fullScreen->setImage(m_displayImage.scaled(QApplication::desktop()->screenGeometry().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); }
@@ -509,14 +515,12 @@ void zoomWindow::replyFinishedDetails()
}
QString path1 = m_settings->value("Save/path").toString().replace("\\", "/");
- QStringList pth1s = m_image->path(m_settings->value("Save/filename").toString(), path1);
+ QStringList pth1s = m_image->path(m_settings->value("Save/filename").toString(), path1, 0, true, false, true, true, true);
QString source1;
bool file1notexists = false;
for (QString pth1 : pth1s)
{
- if (path1.right(1) == "/")
- { path1 = path1.left(path1.length()-1); }
- QFile file(path1+"/"+pth1);
+ QFile file(pth1);
if (file.exists())
source1 = file.fileName();
else
@@ -524,22 +528,22 @@ void zoomWindow::replyFinishedDetails()
}
QString path2 = m_settings->value("Save/path_favorites").toString().replace("\\", "/");
- QStringList pth2s = m_image->path(m_settings->value("Save/filename_favorites").toString(), path2);
+ QStringList pth2s = m_image->path(m_settings->value("Save/filename_favorites").toString(), path2, 0, true, false, true, true, true);
QString source2;
bool file2notexists = false;
for (QString pth2 : pth2s)
{
- if (path2.right(1) == "/")
- { path2 = path1.left(path2.length()-1); }
- QFile file(path2+"/"+pth2);
+ QFile file(pth2);
if (file.exists())
source2 = file.fileName();
else
file2notexists = true;
}
+ QString md5Exists = m_profile->md5Exists(m_image->md5());
+
// If the file already exists, we directly display it
- if (!file1notexists || !file2notexists)
+ if (!md5Exists.isEmpty() || !file1notexists || !file2notexists)
{
if (!file1notexists)
{
@@ -551,7 +555,7 @@ void zoomWindow::replyFinishedDetails()
ui->buttonSaveFav->setText(tr("File already exists (fav)"));
ui->buttonSaveNQuitFav->setText(tr("Close (fav)"));
}
- m_source = !file1notexists ? source1 : source2;
+ m_source = !md5Exists.isEmpty() ? md5Exists : (!file1notexists ? source1 : source2);
m_imagePath = m_source;
log(QString("Image loaded from the file %1").arg(m_source));
@@ -597,6 +601,7 @@ void zoomWindow::replyFinishedZoom(QNetworkReply::NetworkError err, QString erro
m_url = m_image->url();
m_loadedImage = true;
+ updateWindowTitle();
pendingUpdate();
draw();
}
@@ -1130,7 +1135,7 @@ void zoomWindow::updateWindowTitle()
title = tr("Image");
else
title = QString(tr("Image") + " (%1)").arg(infos.join(", "));
- setWindowTitle(QString("%1 - %2 (%3/%4)").arg(title, m_image->parentSite()->name(), QString::number(m_images.indexOf(m_image)), QString::number(m_images.count())));
+ setWindowTitle(QString("%1 - %2 (%3/%4)").arg(title, m_image->parentSite()->name(), QString::number(m_images.indexOf(m_image) + 1), QString::number(m_images.count())));
}
void zoomWindow::next()
diff --git a/languages/ChineseSimplified.ts b/languages/ChineseSimplified.ts
index d72e0b63e..6262672fc 100644
--- a/languages/ChineseSimplified.ts
+++ b/languages/ChineseSimplified.ts
@@ -1342,11 +1342,6 @@
下载队列
-
-
-
-
-
diff --git a/languages/English.ts b/languages/English.ts
index c1d18340f..43055549c 100644
--- a/languages/English.ts
+++ b/languages/English.ts
@@ -1341,11 +1341,6 @@
-
-
-
-
-
diff --git a/languages/French.ts b/languages/French.ts
index 2c76456ac..43f598dc1 100644
--- a/languages/French.ts
+++ b/languages/French.ts
@@ -1466,9 +1466,8 @@
Téléchargement groupé
-
- %p%
+ %p%
diff --git a/languages/Russian.ts b/languages/Russian.ts
index c31556c64..e6165de4b 100644
--- a/languages/Russian.ts
+++ b/languages/Russian.ts
@@ -270,7 +270,7 @@
- Фиксер пустых папок
+ Фиксер пустых папок
@@ -290,7 +290,7 @@
-
+ Пустых папок не найдено.
@@ -300,7 +300,7 @@
- Фиксер пустых папок
+ Фиксер пустых папок
@@ -320,15 +320,15 @@
-
+ Папка не выбрана.
+ Вы собираетесь удалить %n папку. Вы уверены что хотите продолжить?
+ Вы собираетесь удалить %n папки. Вы уверены что хотите продолжить?
Вы собираетесь удалить %n папок. Вы уверены что хотите продолжить?
-
-
@@ -380,32 +380,32 @@
- изображение не "%1"
+ изображение не "%1"
- изображение "%1"
+ изображение "%1"
- источник изображения не начинается с "%1"
+ источник изображения не начинается с "%1"
- источник изображения начинается с "%1"
+ источник изображения начинается с "%1"
- изображение не содержит "%1"
+ изображение не содержит "%1"
- изображение содержит "%1"
+ изображение содержит "%1"
@@ -421,7 +421,7 @@
- Ни один из источников сайта не совместим с объединением.
+ Ни один из источников сайта не совместим с пулами.
@@ -434,52 +434,52 @@
- Отображает информацию о версии.
+ Отображает информацию о версии.
- Показывает помощь.
+ Показывает помощь.
- Неизвестный параметр: %1.
+ Неизвестный параметр: %1.
- Неизвестные параметры: %1.
+ Неизвестные параметры: %1.
- Отсутствует значение после '%1'.
+ Отсутствует значение после '%1'.
- Неожиданное значение после '%1'.
+ Неожиданное значение после '%1'.
- [параметры]
+ [параметры]
- Использование: %1
+ Использование: %1
- Параметры:
+ Параметры:
- Аргументы:
+ Аргументы:
@@ -511,7 +511,7 @@
- Ошибка в определении Javascript: <br/>
+ Ошибка в определении Javascript: <br/>
@@ -558,40 +558,40 @@
-
+ Б
-
+ КБ
-
+ МБ
-
+ ГБ
-
+ КиБ
-
+ МиБ
-
+ ГиБ
@@ -1184,7 +1184,7 @@
-
+ Лимит страниц
@@ -1318,27 +1318,27 @@
-
+ Обновление программы
-
+ Доступна новая версия.<br/>Хотите обновить Grabber прямо сейчас?
-
+ Список изменений
-
+ Версия <b>%1</b>
-
+ Для продолжения обновления нужно закрыть Grabber. Закрыть сейчас?
@@ -1348,11 +1348,6 @@
Массовая загрузка
-
-
-
-
-
@@ -2173,7 +2168,7 @@
- Фиксер списка MD5 сумм
+ Фиксер списка MD5 сумм
@@ -2207,7 +2202,7 @@
- Видимо приложение в прошлый раз было закрыто некорректно. Хотите ли вы начать новый сеанс?
+ Видимо приложение в прошлый раз было закрыто некорректно. Хотите ли вы начать новый сеанс?
@@ -2227,7 +2222,7 @@
-
+ Этот источник не действителен.
@@ -2551,7 +2546,7 @@ Please solve the issue before resuming the download.
- 1
+ 1
@@ -2607,7 +2602,7 @@ Please solve the issue before resuming the download.
-
+ Теги вида/расы
@@ -2622,7 +2617,7 @@ Please solve the issue before resuming the download.
-
+ Окно превью
@@ -2765,32 +2760,32 @@ Please solve the issue before resuming the download.
-
+ Проверять обновления
-
+ Всегда
-
+ Раз в день
-
+ Раз в неделю
-
+ Раз в месяц
-
+ Никогда
@@ -2991,7 +2986,7 @@ Please solve the issue before resuming the download.
-
+ Получать расширение из заголовка файла
@@ -3120,7 +3115,7 @@ Please solve the issue before resuming the download.
-
+ Режим показа результатов поиска с полоской прокрутки
@@ -3292,7 +3287,7 @@ Please solve the issue before resuming the download.
- Включить отдельное поле для поиска по MD5
+ Включить отдельное поле для поиска по MD5
@@ -3348,32 +3343,32 @@ Please solve the issue before resuming the download.
-
+ Предзагрузка
-
+ Слайдшоу
- с
+ с
-
+ Зарывать окно средней клавишей мыши
-
+ Включить навигацию колёсиком мыши
-
+ Расположение изображения
@@ -3383,31 +3378,31 @@ Please solve the issue before resuming the download.
-
+ По центру
-
+ Снизу
-
+ Справа
-
+ Расположение анимации
-
+ Расположение видео
@@ -3431,7 +3426,7 @@ Please solve the issue before resuming the download.
-
+ Вид/Раса
@@ -3499,7 +3494,7 @@ Please solve the issue before resuming the download.
-
+ Использовать системные настройки прокси
@@ -3585,7 +3580,7 @@ Please solve the issue before resuming the download.
- Новая вкладка
+ Новая вкладка пула
@@ -3634,7 +3629,7 @@ Please solve the issue before resuming the download.
- Поиск
+ Поиск
@@ -3773,7 +3768,7 @@ Please solve the issue before resuming the download.
- Для этого источника доступно обновление, но для другой версии программы.
+ Для этого источника доступно обновление, но для другой версии программы.
@@ -3967,15 +3962,15 @@ Please solve the issue before resuming the download.
- Безопасно
+ Безопасно
- Под вопросом
+ Под вопросом
- Откровенный
+ Откровенный
@@ -3990,7 +3985,7 @@ Please solve the issue before resuming the download.
- Ошибка при создании папки.
+ Ошибка при создании папки.
%1
@@ -4070,40 +4065,35 @@ Please solve the issue before resuming the download.
- Неожиданная ошибка во время загрузки изображения (%1).
+ Неожиданная ошибка во время загрузки изображения (%1).
%2
-
+ Копировать файл
-
-
-
-
-
-
+ Копировать данные
-
+ Копировать тег
-
+ Копировать все теги
-
+ Неожиданная ошибка во время загрузки изображения (%1 - %2).
+%3
diff --git a/languages/Spanish.ts b/languages/Spanish.ts
new file mode 100644
index 000000000..63e4e0d62
--- /dev/null
+++ b/languages/Spanish.ts
@@ -0,0 +1,4122 @@
+
+
+
+
+ AboutWindow
+
+
+
+ Acerca de Grabber
+
+
+
+
+ <html><head/><body><p>Grabber es una creación de Bionus.<br/>Por favor visite la <a href="https://github.com/Bionus/imgbrd-grabber"><span style=" text-decoration: underline; color:#0000ff;">página web</span></a> para mantenerse actualizado.</p></body></html>
+
+
+
+
+ Agradecimientos especiales a YMI por buscar y resolver errores, también por sugerir nuevas características para el programa.
+
+
+
+
+ Traducción al español por Eddy Castillo.
+
+
+
+
+ Grabber está actualizado
+
+
+
+
+ Hay una nueva versión disponible: %1
+
+
+
+ AddGroupWindow
+
+
+
+ Añadir grupo
+
+
+
+
+ Sitio web
+
+
+
+
+ Etiquetas
+
+
+
+
+ Página
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Límite de imágenes
+
+
+
+
+ Descargar imágenes con etiquetas en la lista negra
+
+
+
+ AddUniqueWindow
+
+
+
+ Añadir imagen
+
+
+
+
+ Añadir
+
+
+
+
+ Sitio web
+
+
+
+
+ Id
+
+
+
+
+ MD5
+
+
+
+
+ Nombre del archivo
+
+
+
+
+ Carpeta
+
+
+
+
+ Navegar
+
+
+
+
+ Elija una carpeta para guardar
+
+
+
+
+ No se encontró ninguna imagen.
+
+
+
+ BlacklistFix1
+
+
+
+
+ Arreglar lista negra
+
+
+
+
+ Carpeta
+
+
+
+
+ Forzar el cálculo de MD5
+
+
+
+
+ Usar MD5 en el nombre del archivo
+
+
+
+
+ Nombre del archivo
+
+
+
+
+ Lista negra
+
+
+
+
+ Fuente
+
+
+
+
+ %v/%m
+
+
+
+
+ Continuar
+
+
+
+
+ Cancelar
+
+
+
+
+ Esta carpeta no existe.
+
+
+
+
+ Si quiere usar el MD5 en el nombre del archivo, debe incluir el identificador %md5% en él.
+
+
+
+
+
+ Está a punto de descargar información de %n imagen. ¿Desea continuar?
+ Está a punto de descargar información de %n imágenes. ¿Desea continuar?
+
+
+
+
+ BlacklistFix2
+
+
+
+ Arreglar lista negra
+
+
+
+
+ Elija las imágenes a borrar de la lista de abajo.
+
+
+
+
+ Miniatura
+
+
+
+
+ Nombre
+
+
+
+
+ Etiqueta
+
+
+
+
+ Seleccionar las imágenes encontradas
+
+
+
+
+ Aceptar
+
+
+
+
+ Cancelar
+
+
+
+ CustomWindow
+
+
+
+ Añadir un identificador personalizado
+
+
+
+
+ Separe las etiquetas con espacios o saltos de linea
+
+
+
+
+ Nombre
+
+
+
+
+ Etiquetas
+
+
+
+ EmptyDirsFix1
+
+
+
+
+ Arreglar carpetas vacías
+
+
+
+
+ Carpeta
+
+
+
+
+ Continuar
+
+
+
+
+ Cancelar
+
+
+
+
+ No se encontraron carpetas vacías.
+
+
+
+ EmptyDirsFix2
+
+
+
+
+
+ Arreglar carpetas vacías
+
+
+
+
+ Elija las carpetas a eliminar de la lista de abajo.
+
+
+
+
+ Eliminar
+
+
+
+
+ Cancelar
+
+
+
+
+ Ninguna carpeta seleccionada.
+
+
+
+
+
+ Está a punto de borrar %n carpeta. ¿Desea continuar?
+ Está a punto de borrar %n carpetas. ¿Desea continuar?
+
+
+
+
+ FilenameWindow
+
+
+
+ Renombrado
+
+
+
+
+ Renombrado clásico
+
+
+
+
+ Renombrado por javascript
+
+
+
+
+ Advertencia
+
+
+
+
+ Su script contiene errores, ¿desea continuar?
+
+
+
+ Image
+
+
+
+ Tipo desconocido "%1" (tipos disponibles: "%2")
+
+
+
+
+ %1 de la imagen no coincide
+
+
+
+
+ %1 de la imagen coincide
+
+
+
+
+ la imagen no es "%1"
+
+
+
+
+ la imagen no es "%1"
+
+
+
+
+ la fuente de la imagen no comienza con "%1"
+
+
+
+
+ la fuente de la imagen no comienza con "%1"
+
+
+
+
+ la imagen no contiene "%1"
+
+
+
+
+ la imagen contiene "%1"
+
+
+
+ Page
+
+
+
+ No se obtuvo resultados de ninguna de las fuentes del sitio web.
+
+
+
+ PageApi
+
+
+
+ Ninguna de las fuentes de este sitio web soporta colecciones.
+
+
+
+
+ Es imposible buscar etiquetas con la fuente elegida (%1).
+
+
+
+ QCommandLineParser
+
+
+
+ Muestra información de la versión.
+
+
+
+
+ Muestra esta ayuda.
+
+
+
+
+ Opción desconocida '%1'.
+
+
+
+
+ Opciones desconocidas: %1.
+
+
+
+
+ Falta un valor después de '%1'.
+
+
+
+
+ Valor inesperado después de '%1'.
+
+
+
+
+ [opciones]
+
+
+
+
+ Uso: %1
+
+
+
+
+ Opciones:
+
+
+
+
+ Argumentos:
+
+
+
+ QObject
+
+
+
+ Error
+
+
+
+
+ <b>Error:</b> %1
+
+
+
+
+ <b>Advertencia:</b> %1
+
+
+
+
+ <b>Aviso:</b> %1
+
+
+
+
+ MM-dd-yyyy HH.mm
+
+
+
+
+ ¡El nombre de archivo no debe estar vacío!
+
+
+
+
+ No se pueden validar las expresiones Javascript.
+
+
+
+
+ ¡El nombre de archivo no termina con una extensión, identificada con %ext%! Es posible que no pueda abrir los archivos guardados.
+
+
+
+
+ ¡El nombre de archivo no es único para cada imagen y se pueden sobreescribir al guardarse! Debería usar %md5%, lo cual es único para cada imagen para evitar este inconveniente.
+
+
+
+
+ El identificador %%1% no existe y no será reemplazado.
+
+
+
+
+ ¡El formato contiene caracteres prohibidos en Windows! Caracteres prohibidos: * ? " : < > |
+
+
+
+
+ Está utilizando el identificador %id%. Este solo es único para el sitio web seleccionado. La misma ID puede identificar imágenes diferentes dependiendo del sitio web.
+
+
+
+
+ ¡El nombre del archivo no es válido!
+
+
+
+
+
+
+ B
+
+
+
+
+
+ KB
+
+
+
+
+
+ MB
+
+
+
+
+
+ GB
+
+
+
+
+ KiB
+
+
+
+
+ MiB
+
+
+
+
+ GiB
+
+
+
+ RenameExisting1
+
+
+
+
+ Renombrar imágenes existentes
+
+
+
+
+ Carpeta
+
+
+
+
+ Forzar el cálculo de MD5
+
+
+
+
+ Usar MD5 en el nombre del archivo
+
+
+
+
+ Nombre del archivo original
+
+
+
+
+ Nombre del archivo destino
+
+
+
+
+ Fuente
+
+
+
+
+ %v/%m
+
+
+
+
+ Continuar
+
+
+
+
+ Cancelar
+
+
+
+
+ Esta carpeta no existe.
+
+
+
+
+ Si quiere usar el MD5 en el nombre del archivo, debe incluir el identificador %md5% en él.
+
+
+
+
+
+ Está a punto de descargar información de %n imagen. ¿Desea continuar?
+ Está a punto de descargar información de %n imágenes. ¿Desea continuar?
+
+
+
+
+ RenameExisting2
+
+
+
+ Renombrar imágenes existentes
+
+
+
+
+ Se renombraran las siguientes imágenes.
+
+
+
+
+ Vista previa
+
+
+
+
+ Original
+
+
+
+
+ Destino
+
+
+
+
+ Aceptar
+
+
+
+
+ Cancelar
+
+
+
+ SearchWindow
+
+
+
+ Buscar
+
+
+
+
+ Ordenar por
+
+
+
+
+ ID (ascendente)
+
+
+
+
+ ID (descendente)
+
+
+
+
+ Puntuación (ascendente)
+
+
+
+
+ Puntuación (descendente)
+
+
+
+
+ Megapixeles (ascendente)
+
+
+
+
+ Megapixeles (descendente)
+
+
+
+
+ Tamaño del archivo
+
+
+
+
+ Orientación horizontal
+
+
+
+
+ Orientación vertical
+
+
+
+
+ Número de favoritos
+
+
+
+
+ Rango
+
+
+
+
+ Clasificación
+
+
+
+
+ Seguro
+
+
+
+
+ No seguro
+
+
+
+
+ Dudoso
+
+
+
+
+ No dudoso
+
+
+
+
+ Explícito
+
+
+
+
+ No explícito
+
+
+
+
+ Estado
+
+
+
+
+ Eliminado
+
+
+
+
+ Activo
+
+
+
+
+ Marcado
+
+
+
+
+ Pendiente
+
+
+
+
+ Todos
+
+
+
+
+ Fecha
+
+
+
+
+ Calendario
+
+
+
+
+ <i>Recuerde que algunos imageboards limitan el uso a cierto número de etiquetas para los usuarios sin membresía premium.
+
+
+
+
+ Imagen
+
+
+
+
+ Etiquetas
+
+
+
+
+ Elija una fecha
+
+
+
+
+ Buscar una imagen
+
+
+
+ Site
+
+
+
+ éxito
+
+
+
+
+ error
+
+
+
+ SiteWindow
+
+
+
+ Añadir un sitio
+
+
+
+
+ Tipo
+
+
+
+
+ Invitado
+
+
+
+
+ URL
+
+
+
+
+ %v/%m
+
+
+
+
+ No se pudo encontrar el tipo del sitio web. ¿La URL es correcta?
+
+
+
+ SourcesSettingsWindow
+
+
+
+ Opciones de sitio web
+
+
+
+
+ General
+
+
+
+
+ Referente (predeterminado)
+
+
+
+
+
+
+ Ninguno
+
+
+
+
+
+
+ Sitio web
+
+
+
+
+
+
+ Página
+
+
+
+
+
+
+ Imagen
+
+
+
+
+ Referente (vista previa)
+
+
+
+
+
+ Predeterminado
+
+
+
+
+ Referente (imagen)
+
+
+
+
+ Detalles
+
+
+
+
+
+
+ Nombre
+
+
+
+
+ Ignorar (siempre)
+
+
+
+
+ Ignorar (página 1)
+
+
+
+
+ Usar conexión segura (https)
+
+
+
+
+ Descarga
+
+
+
+
+ Descargas simultaneas máximas
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Intervalo (miniatura)
+
+
+
+
+ Intervalo (imagen)
+
+
+
+
+ Intervalo (página)
+
+
+
+
+ Intervalo (detalles)
+
+
+
+
+ Intervalo (error)
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+ Fuentes
+
+
+
+
+ Fuente 1
+
+
+
+
+
+
+
+ XML
+
+
+
+
+
+
+
+ JSON
+
+
+
+
+
+
+
+ Expresión regular
+
+
+
+
+
+
+
+ RSS
+
+
+
+
+ Fuente 2
+
+
+
+
+ Fuente 3
+
+
+
+
+ Fuente 4
+
+
+
+
+ Usar fuentes predeterminadas
+
+
+
+
+ Identificación
+
+
+
+
+
+ Usuario
+
+
+
+
+
+ Contraseña
+
+
+
+
+ Cifrar contraseña
+
+
+
+
+
+ Prueba
+
+
+
+
+ Inicio de sesión
+
+
+
+
+ A través de URL
+
+
+
+
+ Método
+
+
+
+
+ GET
+
+
+
+
+ POST
+
+
+
+
+ URL
+
+
+
+
+ Cookie
+
+
+
+
+ Límite de páginas
+
+
+
+
+ Cookies
+
+
+
+
+
+ Valor
+
+
+
+
+
+ Añadir
+
+
+
+
+ Cabeceras
+
+
+
+
+ Eliminar
+
+
+
+
+ Cancelar
+
+
+
+
+ Aceptar
+
+
+
+
+ Cifrar una contraseña
+
+
+
+
+ Por favor introduzca su contraseña abajo. </br>Se cifrará usando el formato "%1".
+
+
+
+
+ Eliminar un sitio web
+
+
+
+
+ ¿Seguro que quiere eliminar el sitio web %1?
+
+
+
+
+
+ ¡Éxito!
+
+
+
+
+
+ Error
+
+
+
+
+
+ No es posible hacer la prueba
+
+
+
+ TextEdit
+
+
+
+ Favoritos
+
+
+
+
+
+ Eliminar
+
+
+
+
+
+ Añadir
+
+
+
+
+ Guardar para más tarde
+
+
+
+
+ Clasificación
+
+
+
+
+ Ordenar por
+
+
+
+
+ Copiar
+
+
+
+
+ Cortar
+
+
+
+
+ Pegar
+
+
+
+ UpdateDialog
+
+
+
+
+ Actualizador
+
+
+
+
+ Hay una nueva versión disponible.</br>¿Desea actualizar ahora?
+
+
+
+
+ Ver los cambios
+
+
+
+
+ Versión <b>%1</b>
+
+
+
+
+ Para continuar la actualización, el programa debe cerrarse. ¿Desea cerrar ahora?
+
+
+
+ batchWindow
+
+
+
+ Descarga en lotes
+
+
+
+
+ Detalles
+
+
+
+
+
+ Pausa
+
+
+
+
+ Ignorar
+
+
+
+
+
+ Cancelar
+
+
+
+
+ Lote
+
+
+
+
+ URL
+
+
+
+
+ Tamaño
+
+
+
+
+ Velocidad
+
+
+
+
+ Progreso
+
+
+
+
+ Seguir las imágenes descargadas
+
+
+
+
+ Copiar enlaces al portapapeles
+
+
+
+
+ Al terminar la descarga
+
+
+
+
+ No hacer nada
+
+
+
+
+ Cerrar la ventana
+
+
+
+
+ Abrir la bandeja de CD
+
+
+
+
+ Abrir carpeta de destino
+
+
+
+
+ Reproducir un sonido
+
+
+
+
+ Apagar
+
+
+
+
+ Eliminar
+
+
+
+
+ Pausado
+
+
+
+
+ Continuar
+
+
+
+
+
+ h 'h' m 'm' s 's'
+
+
+
+
+
+ m 'm' s 's'
+
+
+
+
+
+ s 's'
+
+
+
+
+ <b>Velocidad promedio:</b> %1 %2<br/><br/><b>Tiempo transcurrido:</b> %3<br/><b>Tiempo faltante:</b> %4
+
+
+
+
+ Cerrar
+
+
+
+ conditionWindow
+
+
+
+ Añadir un identificador personalizado
+
+
+
+
+ <i>Puede añadir un identificador personalizado o etiquetas como condición.</i>
+
+
+
+
+ Condición
+
+
+
+
+ Nombre del archivo
+
+
+
+
+ Carpeta
+
+
+
+
+ <i>Deje vacío el espacio para usar la carpeta predeterminada</i>
+
+
+
+
+ <i>Deje el espacio vacío para usar el nombre de archivo predeterminado.</i>
+
+
+
+ detailsWindow
+
+
+
+ Detalles
+
+
+
+
+ <b>Etiquetas</b>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <i>Desconocido</i>
+
+
+
+
+ <b>ID</b>
+
+
+
+
+ <b>Clasificación</b>
+
+
+
+
+ <b>Puntaje</b>
+
+
+
+
+ <b>Autor</b>
+
+
+
+
+ <b>Fecha</b>
+
+
+
+
+ <b>Dimensiones</b>
+
+
+
+
+ <b>Tamaño</b>
+
+
+
+
+ <b>MD5</b>
+
+
+
+
+ <b>URL</b>
+
+
+
+
+ <b>Fuente</b>
+
+
+
+
+ <b>Muestra</b>
+
+
+
+
+ <b>Miniatura</b>
+
+
+
+
+ <b>Página</b>
+
+
+
+
+ <b>Padre</b>
+
+
+
+
+ <b>Hijo</b>
+
+
+
+
+ <b>Comentarios</b>
+
+
+
+
+ <b>Notas</b>
+
+
+
+
+ Cerrar
+
+
+
+
+ 'el' MM/dd/yyyy '-' hh:mm
+
+
+
+
+
+
+ sí
+
+
+
+
+
+
+
+ no
+
+
+
+
+ sí (#%1)
+
+
+
+ favoriteWindow
+
+
+
+ Editar favorito
+
+
+
+
+ Etiqueta correspondiente al favorito. Usualmente no sirve cambiarlo.
+
+
+
+
+ Etiqueta
+
+
+
+
+ Entre 0 y 100, la nota se puede utilizar para ordenar los favoritos en orden de preferencia.
+
+
+
+
+ Nota
+
+
+
+
+ %
+
+
+
+
+ La última vez que dio clic sobre "Marcar como visto".
+
+
+
+
+ Última vista
+
+
+
+
+ yyyy/MM/dd HH:mm:ss
+
+
+
+
+ Imagen cuyo ícono se mostrará en la lista de favoritos.
+
+
+
+
+ Imagen
+
+
+
+
+ Navegar
+
+
+
+
+ Eliminar
+
+
+
+
+ Elegir una imagen
+
+
+
+ favoritesTab
+
+
+
+ Favoritos
+
+
+
+
+ Ordenar por
+
+
+
+
+ Nombre
+
+
+
+
+ Nota
+
+
+
+
+ Última vista
+
+
+
+
+ Ascendente
+
+
+
+
+ Descendente
+
+
+
+
+ Acepta&r
+
+
+
+
+ Número de columnas
+
+
+
+
+ Después del filtro
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Atrás
+
+
+
+
+ Marcar como &visto
+
+
+
+
+ Obtener &seleccionado
+
+
+
+
+ Obtener esta &página
+
+
+
+
+ Obtener &todo
+
+
+
+
+ &Fuentes
+
+
+
+
+ Combinar resultados
+
+
+
+
+ Marcar &todo como visto
+
+
+
+
+ MM/dd/yyyy
+
+
+
+
+ <b>Nombre:</b> %1<br/><b>Nota:</b> %2 %%<br/><b>Última vista:</b> %3
+
+
+
+
+
+ Ningún resultado desde %1
+
+
+
+
+
+ MM/dd/yyyy '-' hh:mm
+
+
+
+
+ Marcar como visto
+
+
+
+
+ ¿Seguro que quiere marcar todos sus favoritos como vistos?
+
+
+
+ mainWindow
+
+
+
+ Descargas
+
+
+
+
+ Grupos (0/0)
+
+
+
+
+
+
+
+ Etiquetas
+
+
+
+
+ Fuente
+
+
+
+
+ Página
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Límte de imágenes
+
+
+
+
+
+ Nombre del archivo
+
+
+
+
+
+
+ Carpeta
+
+
+
+
+ Añadir a la lista negra
+
+
+
+
+ Progreso
+
+
+
+
+
+ Añadir
+
+
+
+
+ Imágenes individuales
+
+
+
+
+ Id
+
+
+
+
+ MD5
+
+
+
+
+ Clasificación
+
+
+
+
+ URL
+
+
+
+
+ Fecha
+
+
+
+
+ Sitio web
+
+
+
+
+ Eliminar todo
+
+
+
+
+ Eliminar seleccionado
+
+
+
+
+ Descargar
+
+
+
+
+ Descargar seleccionado
+
+
+
+
+ Mover hacia abajo
+
+
+
+
+ Cargar
+
+
+
+
+
+ Guardar
+
+
+
+
+ Mover hacia arriba
+
+
+
+
+ Registros
+
+
+
+
+ Limpiar registros
+
+
+
+
+ Abrir registros
+
+
+
+
+ Ayuda
+
+
+
+
+ Herramientas
+
+
+
+
+ Ver
+
+
+
+
+ Archivo
+
+
+
+
+
+
+ Guardado para más tarde
+
+
+
+
+
+
+ Favoritos
+
+
+
+
+
+ Nombre
+
+
+
+
+ Nota
+
+
+
+
+ Último visto
+
+
+
+
+ Ascendente
+
+
+
+
+ Descendente
+
+
+
+
+ Wiki
+
+
+
+
+ Destino
+
+
+
+
+ Reiniciar
+
+
+
+
+ Opciones
+
+
+
+
+ Ctrl+P
+
+
+
+
+ Abrir carpeta de destino
+
+
+
+
+ Cerrar
+
+
+
+
+ Acerca de Grabber
+
+
+
+
+ Acerca de Qt
+
+
+
+
+ Nueva pestaña
+
+
+
+
+ Cerrar pestaña
+
+
+
+
+ Arreglar lista negra
+
+
+
+
+ Arreglar carpetas vacías
+
+
+
+
+ Nueva pestaña de colecciones
+
+
+
+
+ Arreglar lista MD5
+
+
+
+
+ Abrir carpeta de opciones
+
+
+
+
+ Sitio web del proyecto
+
+
+
+
+ Reporta un problema
+
+
+
+
+ Renombrar imágenes existentes
+
+
+
+
+ No se encontró ninguna fuente
+
+
+
+
+ No se encontró ninguna fuente. ¿Será algún problema de configuración? Intente reinstalando el programa.
+
+
+
+
+ Parece que la aplicación no se cerró correctamente la última vez. ¿Desea restaurar la sesión anterior?
+
+
+
+
+ Se detectó el complemento de Firefox "Danbooru Downloader" en el sistema. ¿Desea cargar su configuración?
+
+
+
+
+ Grupos (%1/%2)
+
+
+
+
+ Esta fuente no es válida.
+
+
+
+
+ El valor de imágenes por página debe ser mayor o igual que 1.
+
+
+
+
+ El límite de imágenes debe ser mayor o igual que 0.
+
+
+
+
+ MM/dd/yyyy
+
+
+
+
+ <b>Nombre:</b> %1<br/><b>Nota:</b> %2 %%<br/><b>Última vista:</b> %3
+
+
+
+
+ ¿Seguro que desea salir de la aplicación?
+
+
+
+
+
+ No guardar para más tarde
+
+
+
+
+ ¡No se especificó una carpeta para guardar!
+
+
+
+
+ ¡No se especificó un nombre de archivo!
+
+
+
+
+ Iniciando sesión, por favor espere...
+
+
+
+
+ Descargando páginas, por favor espere...
+
+
+
+
+
+ Se recibieron todos los URLs de las imágenes (%n imagen).
+ Se recibieron todos los URLs de las imágenes (%n imágenes).
+
+
+
+
+
+ Preparando las imágenes, por favor espere...
+
+
+
+
+ Descargando imágenes...
+
+
+
+
+ Ha ocurrido un error al guardar la imagen.
+%1
+%2
+Por favor, resuelva este problema antes de continuar las descarga.
+
+
+
+
+ Error
+
+
+
+
+
+ Obteniendo las imágenes
+
+
+
+
+
+ %n archivo descargado correctamente.
+ %n archivos descargados correctamente.
+
+
+
+
+
+
+ %n archivo ignorado.
+ %n archivos ignorados.
+
+
+
+
+
+
+ %n archivo ya existe.
+ %n archivos ya existen.
+
+
+
+
+
+
+ %n archivo no se encontró en el servidor.
+ %n archivos no se encontraron en el servidor.
+
+
+
+
+
+
+ %n archivo ignorado.
+ %n archivos ignorados.
+
+
+
+
+
+
+ %n error.
+ %n errores.
+
+
+
+
+
+ Ocurrieron errores durante la descarga de las imágenes. ¿Desea reiniciar la descarga de esas imágenes? (%1/%2)
+
+
+
+
+
+
+ Guardar lista de enlaces
+
+
+
+
+
+ Enlaces en formato Imageboard-Grabber (*.igl)
+
+
+
+
+ ¡Lista de enlaces guardada correctamente!
+
+
+
+
+
+ Error al abrir el archivo.
+
+
+
+
+
+
+ Cargar lista de enlaces
+
+
+
+
+ ¡Lista de enlaces cargada correctamente!
+
+
+
+
+
+ Cargando %n descarga
+ Cargando %n descargas
+
+
+
+
+
+ Elige una carpeta para guardar
+
+
+
+
+
+ %n descarga en progreso
+ %n descargas en progreso
+
+
+
+
+
+ Eliminar de favoritos
+
+
+
+
+ Añadir a favoritos
+
+
+
+
+ Guardar para más tarde
+
+
+
+
+ Abrir en una pestaña nueva
+
+
+
+
+ Abrir en una ventana nueva
+
+
+
+ md5Fix
+
+
+
+ Arreglar lista MD5
+
+
+
+
+ Esta herramienta limpia la lista MD5 y la vuelve a llenar con las sumas MD5 de los archivos encontrados en la carpeta seleccionada.
+
+
+
+
+ Carpeta
+
+
+
+
+ Forzar cálculo MD5
+
+
+
+
+ Usar MD5 en el nombre del archivo
+
+
+
+
+ Nombre del archivo
+
+
+
+
+ %v/%m
+
+
+
+
+ Iniciar
+
+
+
+
+ Cancelar
+
+
+
+
+ Esta carpeta no existe.
+
+
+
+
+ Si quiere usar el MD5 en el nombre del archivo, debe incluir el identificador %md5% en él.
+
+
+
+
+ No se pudo abrir el archivo MD5.
+
+
+
+
+ Finalizado
+
+
+
+
+
+ %n archivo MD5 cargado
+ %n archivos MD5 cargados
+
+
+
+
+ optionsWindow
+
+
+
+ Opciones
+
+
+
+
+ General
+
+
+
+
+ Fuentes
+
+
+
+
+
+ Guardar
+
+
+
+
+ Nombre del archivo
+
+
+
+
+ Nombres de archivo condicionales
+
+
+
+
+ Archivo de texto separado
+
+
+
+
+ Registros separados
+
+
+
+
+ Etiquetas de artistas
+
+
+
+
+ Etiquetas de derechos de autor
+
+
+
+
+ Etiquetas de personajes
+
+
+
+
+ Etiquetas de especies
+
+
+
+
+ Identificador personalizado
+
+
+
+
+ Interfaz
+
+
+
+
+ Ventana de imagen
+
+
+
+
+ Colores
+
+
+
+
+ Márgenes y bordes
+
+
+
+
+ Registros
+
+
+
+
+ Proxy
+
+
+
+
+
+ Comandos
+
+
+
+
+
+ Base de datos
+
+
+
+
+ Idioma
+
+
+
+
+ Al iniciar
+
+
+
+
+
+ No hacer nada
+
+
+
+
+ Cargar la primera página
+
+
+
+
+ Restaurar la sesión anterior
+
+
+
+
+ Lista negra
+
+
+
+
+ <i>Separe las etiquetas con espacios</i>
+
+
+
+
+ Ignorar las imágenes que contengan una etiqueta de la lista negra
+
+
+
+
+ <i>Cuando esté activado, las imágenes que contengan una etiqueta de la lista negra no se mostrarán. De otra forma, se le preguntará antes de mostrar una de estas imágenes.</i>
+
+
+
+
+ Lista blanca
+
+
+
+
+ Descargar
+
+
+
+
+ No descargar automáticamente
+
+
+
+
+ Cuando cargue la imagen
+
+
+
+
+ Cuando cargue la miniatura
+
+
+
+
+ <i>Las imágenes que contengan una etiqueta de la lista blanca serán descargadas automáticamente de acuerdo a la opción elegida.</i>
+
+
+
+
+ Etiquetas ignoradas
+
+
+
+
+ <i>Estas etiquetas no se tomarán en cuenta al guardar la imagen.</i>
+
+
+
+
+ Descargar las imágenes que contengan etiquetas de la lista negra
+
+
+
+
+ Etiquetas adicionales
+
+
+
+
+ <i>Estas etiquetas se añadirán automáticamente en cada búsqueda.</i>
+
+
+
+
+ Pedir confirmación antes de cerrar la ventana
+
+
+
+
+ Buscar actualizaciones
+
+
+
+
+ Siempre
+
+
+
+
+ Diariamente
+
+
+
+
+ Semanalmente
+
+
+
+
+ Mensualmente
+
+
+
+
+ Nunca
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Número de columnas
+
+
+
+
+ Fuente 1
+
+
+
+
+ Fuente 2
+
+
+
+
+ Fuente 3
+
+
+
+
+ Fuente 4
+
+
+
+
+ Obtener etiquetas más precisas al buscar las imágenes
+
+
+
+
+
+
+
+ XML
+
+
+
+
+
+
+
+ JSON
+
+
+
+
+
+
+
+ Expresión regular
+
+
+
+
+
+
+
+ RSS
+
+
+
+
+ Etiquetas automáticas
+
+
+
+
+ Descargar imágenes originales
+
+
+
+
+ Descargar la muestra en caso de error
+
+
+
+
+ Descargar imágenes automáticamente
+
+
+
+
+ Mantener la fecha de creación original
+
+
+
+
+ Carpeta
+
+
+
+
+
+
+ Navegar
+
+
+
+
+
+
+ Favoritos
+
+
+
+
+ Separador de etiquetas
+
+
+
+
+ Substituye los espacios por guiones bajos
+
+
+
+
+ Longitud máxima
+
+
+
+
+ <i>El nombre del archivo se acortará si es más grande que este número. Al dejarlo en 0 se usará el límite predeterminado.</i>
+
+
+
+
+ Descargas simultáneas
+
+
+
+
+ Al terminar la descarga
+
+
+
+
+ Cerrar la ventana
+
+
+
+
+ Abrir la bandeja de CD
+
+
+
+
+ Reproducir un sonido
+
+
+
+
+ Apagar
+
+
+
+
+ Si el archivo existe
+
+
+
+
+ Copiar
+
+
+
+
+ Mover
+
+
+
+
+ No guardar
+
+
+
+
+ <i>La identidad del archivo se encuentra usando el algoritmo MD5.</i>
+
+
+
+
+ Repeticiones automáticas de descarga
+
+
+
+
+ Reemplazar JPEG por JPG
+
+
+
+
+ Obtener extensión de la cabecera del archivo
+
+
+
+
+ Predeterminado
+
+
+
+
+ Añadir nombre de archivo condicional
+
+
+
+
+ <i>Cada vez que se guarde una imagen, se creará un archivo de texto adicional con el mismo nombre en el mismo lugar, conteniendo las etiquetas de la imagen.</i>
+
+
+
+
+ Habilitar archivos de texto externos
+
+
+
+
+ Contenido del archivo de texto
+
+
+
+
+ Identificadores disponibles: Los mismos que se utilizan en la sección "Guardar".
+
+
+
+
+ Habilitar registros externos
+
+
+
+
+ Archivo de registro
+
+
+
+
+ Formato de línea
+
+
+
+
+ <i>Cada vez que se guarde una imagen se añadirá una nueva línea al archivo seleccionado.</i>
+
+
+
+
+
+
+
+ Si está vacío
+
+
+
+
+
+
+
+ Separador
+
+
+
+
+
+
+
+ Si el número de etiquetas es mayor que
+
+
+
+
+
+
+
+ Mantener todas las etiquetas
+
+
+
+
+
+
+
+ Mantener un número de etiquetas y luego añadir
+
+
+
+
+
+
+
+ Reemplazar todas las etiquetas por
+
+
+
+
+
+
+
+ Mantener un número de etiquetas
+
+
+
+
+
+
+
+ Un archivo por etiqueta
+
+
+
+
+ Usar la etiqueta más corta
+
+
+
+
+ Añadir un identificador personalizado
+
+
+
+
+ Usar el área de desplazamiento para los resultados
+
+
+
+
+ Redimensionar las vistas previas en vez de recortarlas
+
+
+
+
+ Habilitar el autocompletado
+
+
+
+
+ Esconder los favoritos
+
+
+
+
+ <i>La lista de favoritos se esconderá al alcanzar este número de imágenes.</i>
+
+
+
+
+ Tipo de visualización de la fuente
+
+
+
+
+ Texto
+
+
+
+
+
+
+ Imagen
+
+
+
+
+ Imagen y texto
+
+
+
+
+ No mostrar
+
+
+
+
+ Letras mostradas
+
+
+
+
+ Mostrar un número de letras
+
+
+
+
+ Antes del primer punto
+
+
+
+
+ Antes del último punto
+
+
+
+
+ <i>El número de letras que se mostrará junto a las casillas de las fuentes en la ventana principal.</i>
+
+
+
+
+ Posición de la lista de etiquetas
+
+
+
+
+
+
+
+ Arriba
+
+
+
+
+
+
+
+ Izquierda
+
+
+
+
+ Automático
+
+
+
+
+ Mostrar advertencia si se encuentra un modificador incompatible
+
+
+
+
+ Mostrar otras advertencias
+
+
+
+
+ Descargar páginas no cargadas
+
+
+
+
+ <i>Si esta opción está activa, al presionar el botón "Obtener esta página" se tomarán en cuenta las modificaciones hechas al número de imágenes por página, el número de la página, etc. incluso si no pudo cargarse.</i>
+
+
+
+
+ Imagen, nombre y detalles
+
+
+
+
+ Imagen y nombre
+
+
+
+
+ Imagen y detalles
+
+
+
+
+ Nombre y detalles
+
+
+
+
+ Solo la imagen
+
+
+
+
+ Solo el nombre
+
+
+
+
+ Solo los detalles
+
+
+
+
+ Visualización de favoritos
+
+
+
+
+ Ampliación
+
+
+
+
+ %
+
+
+
+
+ Artistas
+
+
+
+
+ Series
+
+
+
+
+ Personajes
+
+
+
+
+ Modelos
+
+
+
+
+ Generales
+
+
+
+
+ En la lista negra
+
+
+
+
+ Ignorados
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Color
+
+
+
+
+ Precarga
+
+
+
+
+ Presentación
+
+
+
+
+ s
+
+
+
+
+ Clic con el botón central para cerrar la ventana
+
+
+
+
+ Habilitar navegación con la rueda de desplazamiento
+
+
+
+
+ Posición de la imagen
+
+
+
+
+
+
+
+
+
+ Centro
+
+
+
+
+
+
+ Abajo
+
+
+
+
+
+
+ Derecha
+
+
+
+
+ Posición de la animación
+
+
+
+
+ Posición del video
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipografía
+
+
+
+
+ Círculo
+
+
+
+
+ Especies
+
+
+
+
+ Servidores
+
+
+
+
+
+ Márgenes horizontales
+
+
+
+
+
+ Bordes
+
+
+
+
+ Imágenes
+
+
+
+
+ Márgenes verticales
+
+
+
+
+ Mostrar registros
+
+
+
+
+ Usar proxy
+
+
+
+
+
+ Servidor
+
+
+
+
+ Puerto
+
+
+
+
+ Tipo
+
+
+
+
+ HTTP
+
+
+
+
+ SOCKS v5
+
+
+
+
+ Usar la configuración del sistema
+
+
+
+
+
+ Etiqueta (después)
+
+
+
+
+
+ Etiqueta (antes)
+
+
+
+
+
+ Etiquetas adicionales: <i>%tag%</i>, <i>%type%</i>, <i>%number%</i>.<br/><i>%tag%</i>: la etiqueta<br/><i>%type%</i>: tipo de etiqueta, "general", "artist", "copyright", "character", "model" o "photo_set"<br/><i>%number%</i>: el número del tipo de etiqueta (entre 0 y 6)
+
+
+
+
+ Inicio
+
+
+
+
+ Final
+
+
+
+
+ Identificación
+
+
+
+
+ Usuario
+
+
+
+
+ Contraseña
+
+
+
+
+ Controlador
+
+
+
+
+ Elija una carpeta para guardar
+
+
+
+
+ Elija una carpeta para guardar los favoritos
+
+
+
+
+ Elija un color
+
+
+
+
+ Elija una tipografía
+
+
+
+
+ Ha ocurrido un error al crear la carpeta para guardar.
+
+
+
+
+ Ha ocurrido un error al crear la carpeta para guardar los favoritos.
+
+
+
+ poolTab
+
+
+
+ Nueva pestaña de colecciones
+
+
+
+
+ &Más
+
+
+
+
+ Acepta&r
+
+
+
+
+ Quizás quiso decir:
+
+
+
+
+ Imágenes por página
+
+
+
+
+ Número de columnas
+
+
+
+
+ Después del filtro
+
+
+
+
+ Obtener &seleccionado
+
+
+
+
+ Obtener está &página
+
+
+
+
+ Obtener &todo
+
+
+
+ searchTab
+
+
+
+ servidor fuera de línea
+
+
+
+
+ demasiadas etiquetas
+
+
+
+
+ página demasiado lejos
+
+
+
+
+ una de las miniaturas está vacía (<a href="%1">%1</a>).
+
+
+
+
+ Algunas etiquetas de la imagen se encuentran en la lista blanca: %1. Sin embargo, algunas etiquetas se encuentran en la lista negra: %2. ¿Desea descargarla de todas formas?
+
+
+
+
+ Sin resultados
+
+
+
+
+ Razones posibles: %1
+
+
+
+
+ Página %1 de %2 (%3 de %4)
+
+
+
+
+ <b>Etiquetas:</b> %1<br/><br/>
+
+
+
+
+ <b>ID:</b> %1<br/>
+
+
+
+
+ <b>Clasificación:</b> %1<br/>
+
+
+
+
+ <b>Puntaje:</b> %1<br/>
+
+
+
+
+ <b>Usuario:</b> %1<br/>
+
+
+
+
+ <b>Dimensiones:</b> %1 x %2<br/>
+
+
+
+
+ <b>Tamaño:</b> %1 %2<br/>
+
+
+
+
+ <b>Fecha:</b> %1
+
+
+
+
+ 'el 'MM/dd/yyyy' - 'hh:mm
+
+
+
+
+ Lista negra
+
+
+
+
+
+ se detectó %n etiqueta de esta imagen en la lista negra: %1. ¿Desea mostrarla de todas formas?
+ se detectaron %n etiquetas de esta imagen en la lista negra: %1. ¿Desea mostrarla de todas formas?
+
+
+
+
+ sourcesWindow
+
+
+
+ Fuentes
+
+
+
+
+ Seleccionar todo
+
+
+
+
+ Añadir
+
+
+
+
+ Cancelar
+
+
+
+
+ Aceptar
+
+
+
+
+ Opciones
+
+
+
+
+ Hay una actualización disponible para esta fuente.
+
+
+
+ startWindow
+
+
+
+ Primera ejecución
+
+
+
+
+ Antes de comenzar, el programa necesita cierta información para funcionar correctamente. Puede saltarse este paso, y se le pedirá más tarde.
+
+
+
+
+ Idioma
+
+
+
+
+ Carpeta
+
+
+
+
+ Navegar
+
+
+
+
+ Formato
+
+
+
+
+ ...
+
+
+
+
+ Fuente
+
+
+
+
+ <i>Si es la primera vez que usa Grabber, es aconsejable que primero lea la página <a href="https://github.com/Bionus/imgbrd-grabber/wiki/GettingStarted">getting started.</a> </i>
+
+
+
+
+ Opciones
+
+
+
+
+ Elige una carpeta para guardar
+
+
+
+
+ Ha ocurrido un error al crear la carpeta para guardar.
+
+
+
+ tagTab
+
+
+
+ Nueva pestaña
+
+
+
+
+ &Más
+
+
+
+
+ Acepta&r
+
+
+
+
+ Quizás quiso decir:
+
+
+
+
+ Después del filtro
+
+
+
+
+ Número de columnas
+
+
+
+
+ Imágenes por página
+
+
+
+
+ &Fuentes
+
+
+
+
+ &Combinar resultados
+
+
+
+
+ Obtener &seleccionado
+
+
+
+
+ Obtener esta &página
+
+
+
+
+ Obtener &todo
+
+
+
+
+ Buscar
+
+
+
+ zoomWindow
+
+
+
+
+
+ Imagen
+
+
+
+
+ Más detalles
+
+
+
+
+
+
+ Guardar
+
+
+
+
+
+
+ Guardar y cerrar
+
+
+
+
+ Carpeta de destino
+
+
+
+
+ Guardar como...
+
+
+
+
+ Guardar (favorito)
+
+
+
+
+ Guardar y cerrar (favorito)
+
+
+
+
+ Carpeta de destino (favorito)
+
+
+
+
+ Copiar archivo
+
+
+
+
+ Copiar datos
+
+
+
+
+ La carpeta no existe
+
+
+
+
+ La carpeta para guardar no existe. ¿Desea crearla?
+
+
+
+
+ Ocurrió un error al crear la carpeta.
+%1
+
+
+
+
+ Eliminar de favoritos
+
+
+
+
+ Elegir como imagen
+
+
+
+
+ Añadir a favoritos
+
+
+
+
+ No guardar para más tarde
+
+
+
+
+ Guardar para más tarde
+
+
+
+
+ No ignorar
+
+
+
+
+ Ignorar
+
+
+
+
+ Copiar etiqueta
+
+
+
+
+ Copiar todas las etiquetas
+
+
+
+
+ Abrir en una pestaña nueva
+
+
+
+
+ Abrir en una ventana nueva
+
+
+
+
+ Abrir en el navegador web
+
+
+
+
+
+ El archivo ya existe
+
+
+
+
+
+ Cerrar
+
+
+
+
+
+ El archivo ya existe (favorito)
+
+
+
+
+
+ Cerrar (favorito)
+
+
+
+
+ Ha ocurrido un error inesperado al cargar la imagen (%1 - %2)
+%3
+
+
+
+
+
+
+ Guardando...
+
+
+
+
+ Guardando... (favorito)
+
+
+
+
+
+ Error
+
+
+
+
+ ¡No se especificó una carpeta para guardar! ¿Desea abrir la ventana de opciones?
+
+
+
+
+ ¡No se especificó un formato de guardado! ¿Desea abrir la ventana de opciones?
+
+
+
+
+ Error al guardar la imagen.
+
+
+
+
+ ¡Guardado! (favorito)
+
+
+
+
+ ¡Guardado!
+
+
+
+
+ ¡Copiado! (favorito)
+
+
+
+
+ ¡Copiado!
+
+
+
+
+ ¡Movido! (favorito)
+
+
+
+
+ ¡Movido!
+
+
+
+
+ ¡Ignorado! (favorito)
+
+
+
+
+ ¡Ignorado!
+
+
+
+
+ Guardar imagen
+
+
+
diff --git a/languages/YourLanguage.ts b/languages/YourLanguage.ts
index d92329d67..c32634284 100644
--- a/languages/YourLanguage.ts
+++ b/languages/YourLanguage.ts
@@ -1338,11 +1338,6 @@
-
-
-
-
-
diff --git a/lib/src/models/filename.cpp b/lib/src/models/filename.cpp
index 08d388bb9..6e75fc5ad 100644
--- a/lib/src/models/filename.cpp
+++ b/lib/src/models/filename.cpp
@@ -460,10 +460,6 @@ QStringList Filename::path(const Image& img, Profile *profile, QString pth, int
fns[i] = fns[i].trimmed();
fns[i].replace(QRegExp(" */ *"), "/");
- // We remove empty directory names
- while (fns[i].indexOf("//") >= 0)
- { fns[i].replace("//", "/"); }
-
// Max filename size option
if (shouldFixFilename)
{
@@ -473,7 +469,17 @@ QStringList Filename::path(const Image& img, Profile *profile, QString pth, int
// Include directory in result
if (getFull)
- { fns[i] = QDir::toNativeSeparators(pth + "/" + fns[i]); }
+ { fns[i] = pth + "/" + fns[i]; }
+
+ if (shouldFixFilename)
+ {
+ // Native separators
+ fns[i] = QDir::toNativeSeparators(fns[i]);
+
+ // We remove empty directory names
+ QChar sep = QDir::separator();
+ fns[i].replace(QRegExp(QRegExp::escape(sep) + "{2,}"), sep);
+ }
}
return fns;
diff --git a/lib/src/updater/program-updater.cpp b/lib/src/updater/program-updater.cpp
index 4db6207e7..8b65f19ae 100644
--- a/lib/src/updater/program-updater.cpp
+++ b/lib/src/updater/program-updater.cpp
@@ -41,6 +41,13 @@ void ProgramUpdater::checkForUpdatesDone()
}
+QUrl ProgramUpdater::latestUrl() const
+{
+ QVariant json = Json::parse(m_source);
+ QMap lastRelease = json.toMap();
+ return QUrl(lastRelease["html_url"].toString());
+}
+
void ProgramUpdater::downloadUpdate()
{
QVariant json = Json::parse(m_source);
diff --git a/lib/src/updater/program-updater.h b/lib/src/updater/program-updater.h
index 9139edadf..03f7bd8b9 100644
--- a/lib/src/updater/program-updater.h
+++ b/lib/src/updater/program-updater.h
@@ -12,6 +12,7 @@ class ProgramUpdater : public Updater
public:
ProgramUpdater();
ProgramUpdater(QString baseUrl);
+ QUrl latestUrl() const;
public slots:
void checkForUpdates();
diff --git a/release/languages/languages.ini b/release/languages/languages.ini
index 9acf136cf..d802d76f5 100644
--- a/release/languages/languages.ini
+++ b/release/languages/languages.ini
@@ -3,4 +3,9 @@ English=English
French=French - Français
Russian=Russian - русский
ChineseSimplified=Chinese (Simplified) - 中文(简体)
-ChineseTraditional=Chinese (Traditional) - 中文(繁體)
\ No newline at end of file
+ChineseTraditional=Chinese (Traditional) - 中文(繁體)
+Spanish=Spanish - Español
+
+[innosetup]
+en=English
+fr=French
\ No newline at end of file
diff --git a/release/sites/Shimmie/model.xml b/release/sites/Shimmie/model.xml
index 3a79ccf6d..568f0d813 100755
--- a/release/sites/Shimmie/model.xml
+++ b/release/sites/Shimmie/model.xml
@@ -15,8 +15,8 @@
<li class="tag-type-([^"]+)">[^<]*<a href="[^"]+">[^<]*</a>[^<]*<a href="[^"]+">([^<]+)</a>[^<]*</li>|<a class=['"]tag_name['"] href=['"]([^'"]+)(?:/1)?['"]>([^<]+)</a>
- <a(?: class=['"][^'"]*['"])? href=['"][^'">]*\/post\/view\/([^'"]+)['"][^>]*>[^<]*(<img(?: id=['"](?:[^'"]*)['"])? title=['"]([^'"]+)(?: \/\/ ([^'"]+)x([^'"]+) \/\/ [^'"]*)?['"] alt=['"][^'"]*['"](?: height=['"][^'"]*['"])? width=['"][^'"]*['"](?: height=['"][^'"]*['"])?[^>]*(?:src|data-original)=['"][^'"]*(\/_thumbs\/([^\/]*)\/[^'"]*\.jpg|\/thumb\/([^'"]*)\.jpg|questionable\.jpg)['"][^>]*>).*<\/a>|<a href=['"][^'">]*\/i([^'"]+)['"](?: class=['"][^'"]*['"])?[^>]*>[^<]*(<img(?: id=['"](?:[^'"]*)['"])? src=['"][^'"]*(\/_thumbs\/([^'"]*)(?:_th)?\.jpg|\/thumb\/([^'"]*)\.jpg|questionable\.jpg)['"] title=['"]([^'"]+) \/\/ ([^'"]+)x([^'"]+) \/\/ [^'"]*['"] alt=['"][^'"]*['"] ?\/?>)[^<]*<\/a>
- id|image|tags|width|height|preview_url|md5|md5|id|image|preview_url|md5|md5|tags|width|height
+ <a(?: class=['"][^'"]*['"])? href=['"][^'">]*\/post\/view\/([^'"]+)['"][^>]*>[^<]*(<img(?: id=['"](?:[^'"]*)['"])? title=['"]([^'"\/]+)(?: \/\/ ([^'"]+)x([^'"]+) \/\/ ([^'"]*) \/\/ ([^'"]*))?['"] alt=['"][^'"]*['"](?: height=['"][^'"]*['"])? width=['"][^'"]*['"](?: height=['"][^'"]*['"])?[^>]*(?:src|data-original)=['"][^'"]*(\/_thumbs\/([^\/]*)\/[^'"]*\.jpg|\/thumb\/([^'"]*)\.jpg|questionable\.jpg)['"][^>]*>).*<\/a>|<a href=['"][^'">]*\/i([^'"]+)['"](?: class=['"][^'"]*['"])?[^>]*>[^<]*(<img(?: id=['"](?:[^'"]*)['"])? src=['"][^'"]*(\/_thumbs\/([^'"]*)(?:_th)?\.jpg|\/thumb\/([^'"]*)\.jpg|questionable\.jpg)['"] title=['"]([^'"\/]+) \/\/ ([^'"]+)x([^'"]+) \/\/ ([^'"]*) \/\/ ([^'"]*)['"] alt=['"][^'"]*['"] ?\/?>)[^<]*<\/a>
+ id|image|tags|width|height|filesize|ext|preview_url|md5|md5|id|image|preview_url|md5|md5|tags|width|height|filesize|ext
<a href=['"]/post/list(?:/[^/]+)?/(\d*)['"]>Last</a>
<img.+ id=['"]main_image['"] src=['"]([^']+)['"][^>]*>
true
diff --git a/release/themes/Default/style.css b/release/themes/Default/style.css
new file mode 100644
index 000000000..e69de29bb
diff --git a/releases/setup.iss b/releases/setup.iss
index 80e69cc16..513d4d912 100755
--- a/releases/setup.iss
+++ b/releases/setup.iss
@@ -1,5 +1,5 @@
#define MyAppName "Grabber"
-#define MyAppVersion "5.2.2"
+#define MyAppVersion "5.2.3"
#define MyAppPublisher "Bionus"
#define MyAppURL "https://github.com/Bionus/imgbrd-grabber"
#define MyAppExeName "Grabber.exe"
@@ -89,6 +89,7 @@ Source: "..\release\crashreporter\ChineseSimplified.qm"; DestDir: "{app}\crashre
Source: "..\release\crashreporter\English.qm"; DestDir: "{app}\crashreporter"; Flags: ignoreversion
Source: "..\release\crashreporter\French.qm"; DestDir: "{app}\crashreporter"; Flags: ignoreversion
Source: "..\release\crashreporter\Russian.qm"; DestDir: "{app}\crashreporter"; Flags: ignoreversion
+Source: "..\release\crashreporter\Spanish.qm"; DestDir: "{app}\crashreporter"; Flags: ignoreversion
Source: "..\release\imageformats\qdds.dll"; DestDir: "{app}\imageformats"; Flags: ignoreversion
Source: "..\release\imageformats\qgif.dll"; DestDir: "{app}\imageformats"; Flags: ignoreversion
Source: "..\release\imageformats\qicns.dll"; DestDir: "{app}\imageformats"; Flags: ignoreversion
@@ -103,7 +104,11 @@ Source: "..\release\languages\ChineseSimplified.qm"; DestDir: "{app}\languages";
Source: "..\release\languages\English.qm"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "..\release\languages\French.qm"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "..\release\languages\Russian.qm"; DestDir: "{app}\languages"; Flags: ignoreversion
+Source: "..\release\languages\Spanish.qm"; DestDir: "{app}\languages"; Flags: ignoreversion
Source: "..\release\languages\languages.ini"; DestDir: "{app}\languages"; Flags: ignoreversion
+Source: "..\release\languages\qt\English.qm"; DestDir: "{app}\languages\qt"; Flags: ignoreversion
+Source: "..\release\languages\qt\French.qm"; DestDir: "{app}\languages\qt"; Flags: ignoreversion
+Source: "..\release\languages\qt\Russian.qm"; DestDir: "{app}\languages\qt"; Flags: ignoreversion
Source: "..\release\platforms\qminimal.dll"; DestDir: "{app}\platforms"; Flags: ignoreversion
Source: "..\release\platforms\qoffscreen.dll"; DestDir: "{app}\platforms"; Flags: ignoreversion
Source: "..\release\platforms\qwindows.dll"; DestDir: "{app}\platforms"; Flags: ignoreversion
@@ -144,6 +149,7 @@ Source: "..\release\sites\Zerochan\icon.png"; DestDir: "{localappdata}\Bionus\G
Source: "..\release\sites\Zerochan\model.xml"; DestDir: "{localappdata}\Bionus\Grabber\sites\Zerochan"; Flags: ignoreversion
Source: "..\release\sites\Zerochan\sites.txt"; DestDir: "{localappdata}\Bionus\Grabber\sites\Zerochan"; Flags: onlyifdoesntexist
Source: "..\release\sites\Zerochan\www.zerochan.net\settings.ini"; DestDir: "{localappdata}\Bionus\Grabber\sites\Zerochan\www.zerochan.net"; Flags: onlyifdoesntexist
+Source: "..\release\themes\Default\style.css"; DestDir: "{localappdata}\Bionus\Grabber\themes\Default"; Flags: onlyifdoesntexist
[InstallDelete]
Type: filesandordirs; Name: "{app}\languages\updater"
@@ -185,3 +191,12 @@ begin
vcredist2015();
Result := true;
end;
+
+procedure CurStepChanged(CurStep: TSetupStep);
+begin
+ if CurStep = ssPostInstall then
+ begin
+ Log('Post install');
+ SaveStringToFile(ExpandConstant('{localappdata}') + '\Bionus\Grabber\innosetup.ini', '[general]' + #13#10 + 'language=' + ExpandConstant('{language}') + #13#10, False);
+ end;
+end;