From 990247607892ebc412d09f12dde0a7accce1ef3f Mon Sep 17 00:00:00 2001 From: nowrep Date: Sat, 22 Oct 2011 22:29:33 +0200 Subject: [PATCH] Import Bookmarks from other Browsers Added possibility to import bookmarks from Chrome, Firefox and Opera Please test it by yourself and send me feedback. Thanks :) --- bin/locale/cs_CZ.qm | Bin 77588 -> 81747 bytes bin/locale/sk_SK.qm | Bin 77594 -> 84061 bytes src/QupZilla.pro | 25 +- src/app/mainapplication.cpp | 6 + src/app/mainapplication.h | 2 +- src/app/qupzilla.cpp | 20 +- src/app/qupzilla.h | 1 + src/bookmarks/bookmarksmodel.cpp | 6 + src/bookmarks/bookmarksmodel.h | 7 + src/bookmarksimport/bookmarksimportdialog.cpp | 291 +++++++++++++ src/bookmarksimport/bookmarksimportdialog.h | 60 +++ src/bookmarksimport/bookmarksimportdialog.ui | 347 +++++++++++++++ src/bookmarksimport/chromeimporter.cpp | 73 ++++ src/bookmarksimport/chromeimporter.h | 40 ++ src/bookmarksimport/firefoximporter.cpp | 74 ++++ src/bookmarksimport/firefoximporter.h | 38 ++ src/bookmarksimport/operaimporter.cpp | 66 +++ src/bookmarksimport/operaimporter.h | 36 ++ src/data/icons.qrc | 3 + src/data/icons/browsers/chrome.png | Bin 0 -> 3809 bytes src/data/icons/browsers/firefox.png | Bin 0 -> 5440 bytes src/data/icons/browsers/opera.png | Bin 0 -> 2920 bytes translations/cs_CZ.ts | 363 +++++++++++----- translations/de_DE.ts | 351 +++++++++++----- translations/es.ts | 351 +++++++++++----- translations/nl_NL.ts | 351 +++++++++++----- translations/sk_SK.ts | 395 ++++++++++++------ 27 files changed, 2400 insertions(+), 506 deletions(-) create mode 100644 src/bookmarksimport/bookmarksimportdialog.cpp create mode 100644 src/bookmarksimport/bookmarksimportdialog.h create mode 100644 src/bookmarksimport/bookmarksimportdialog.ui create mode 100644 src/bookmarksimport/chromeimporter.cpp create mode 100644 src/bookmarksimport/chromeimporter.h create mode 100644 src/bookmarksimport/firefoximporter.cpp create mode 100644 src/bookmarksimport/firefoximporter.h create mode 100644 src/bookmarksimport/operaimporter.cpp create mode 100644 src/bookmarksimport/operaimporter.h create mode 100644 src/data/icons/browsers/chrome.png create mode 100644 src/data/icons/browsers/firefox.png create mode 100644 src/data/icons/browsers/opera.png diff --git a/bin/locale/cs_CZ.qm b/bin/locale/cs_CZ.qm index 08b0d8cf2cdab304ee002f489339bdd06e0317a7..f1b46f7c2c3adad0f4e4b858c2dc916155db3e2d 100644 GIT binary patch delta 9934 zcmcIp2Urwm*S)hlvt_oSh+SMoEU4HuDq;{tK}0OEp~MB2BFirBE-D%wYwQ)pMzEJ) zi4jZeqM~Ah1iJ=leqY2? zKJ_?b(b-zn4-H*);OkCAl@Ak9GompQh&X&!b;qS1*8_;Ut|dyzl(6`zgtrYu-5L@3 zMG%GTC#vTzVI-anIYx}kLewXYsIUQWI#KjpqW+VJTIUc6gGLg)Zb3A77E$fq68hAT z(6pOmS;vTWUL$tua-zidiCv$H1zQojaTQU17_qyGh?E_P-NzD@A1~n{yM&KMxsZ`v zBDTPr=uo~38FmG*Gcjxd3G9`5L`%97`+ZY9@QT>Smx&766Z=CeY*`ZhikGKtK zM4RyZrlCYP^9ACL;YHEt6iw!1wwgu%2& z@S%pHC425sLl{DPtC6ppCo!I3)FkT;QBEl}ofS=#*_Ph(E{_~oOC8RRBl>Cvb-9>I zwEq+Z`QZBE9qKmf6_M#ag*2Q<6gpVKeg+C@y@;rJxC)p(HT1v#H;Vb%My6u*jL*On0tdcxGWd=5GCDO1M-Ox0<_)Uh`~?i^x#E{-AcTFNvUHx^}SWjbUd zWNF=)fO2?m>}DpwcpLh0mI=*lPSm~u6Do)w2B%6l9E&6@+{X0v4I`#fI1?R%ki3`0 z#9V}dZ8Mm$bt(}ZY{LlmkOLnWn3)q{a6mUE{bCqV*?Y_iuL7buG0bOsWkjE!VRm=+ zB1SuwIS>Z{3%tr4*1(X7Bbl7C1w<_`Fv5|Bn}}xYVNT6?M6~cVb9(MGBHz1AaTyrc zcTdJFoJ{m-WtptjYN8J(NoWp~@au4yM?@98*HBg^dJ2-bL{?YnPxNMqtbS!Dkya;b zyxu`fjoGrM`>=7qY*|=^Ye>#svgnqrh|Y}>WGV66iI$d=rJgD!`lOz0Y9eA({eWyn z;cKD`O4;lRU})ub+5GwAh$b0jTk2!skU-fkBrSb0LbiJzLioi7*}lVY_<`Ijuu3eR)j$nMNV@_w2tdww1UTC!xN(~uLbg^y*Wxw*u+#mdXCWRQdd zvmUtXiO8&Tca@&mmPS zE8aJz$=ALB#g(7Bkf|_TzO6r=+f^bzR0&k8_3|S3al}+?DlhH|tm7uXy>&7Pbk!;U zwrfk2$@}uh)3BlCjr>V%VAf&zvx?P-_^a|~HBnx&4#U_w5$KXv9I%GK8@~aZm`%i2DYMs32uszLal^259aFYiFiD%;{V8b$E z?Y@~reXXp0Pcc!C0(SIptfOQleE5=``8`4yRfV0q{1!I;ik)}dov7L~c1bV{s5F($ z7$d;*?q9Q+7Z(wuIn1u?7ELs=A-fhTNa2mybq9fcX0n?bA=&B$NElfl;ey#NWMr9a zHt!@#4q}h0k*tN0Y~G;Sc>cMBjW$U5VHXL_oP?GnHct>A%$Y9TxPFJt8+8OZaEr|w zjr;mkYO!sL01eiK@n_0IC@6a ze(YD_t07e3tWem?it>BHUfw&Gs9X?xb!Q3&0~!0ENg%Rz1^XcUAYr^=pOnr)wkET$ zHh`fc`5eth2u4oem>1Z%|6WeB{2aPsT~1pM(yQ#j8D{vSH=O3GyFx2)wVI>r`ETdy zU&g#Ktu|Nx9@eXJM&SI;>WO52T)-S1%Hk#$avVwY?O`r-?UzJ~dJ>+^v@%Wz)|NJITUc5{7T zYRI_5_gfHk?#LbAhP`w<$h2U?=Lg zM$yj(=5kxOkkK_!M6OLHy0%#HVIz2YHc}Ba8|&q@RwRU!A?dm+Eak9n|CS0%xPW%r zKUI+=F5GjuVvM-puFeXe?}8PJ-SGDVrHW-GU@&5fV#U&9#CUisHeB{38mCok^I3!H zI+XXaEFsKYibf5?XPUQ^A2L~rEEUoInm`p zW&3aBm<7j5c;SlD?^PCt&;n(@hR4v%Je326pzrI>D5Ildh&C=znh6ffyQoaMg2{<1 zRyrRQVX7_^l%qC85*=R%M6!6DR8DV&0YUYVa(bKgsP~)7c_&Z>YbGlf6{Miq^i!r+ z)ng)RF5!wx8ep>`R@ExgqG#$C}-6Z9UPYz<% zyQchcp${gdG0K;1v5(t#DwT{y{Woi^Qtifu`5F~}IgIGR9aXK1XrJ1HDqkEv$nTA+ zsbMR!cZ;g&8(equRkd090hF(qs#A^{NqRsPxB$6wV25hxRZ#s|dzEmynW#07- zF{<*a=|`)=F|}$24?{Es5;nf-LV;R8l5WH{lJI$!3mMgZ)q=wJiBarOt$8&Piddjp z{|yYOR8941Yy>8r1*)uDw~@3RRGU8?h3be`ZC~AzXxMet{{DUOUa9Ip_x?oNO{(MW zFd(R+>eLT~NV){omy=2`()Cf@Sg>6{b`DlO2|JA0Z?WoWfIrbk-PMXkd5CpIwfh-8 z&U6a3R~kIDZB(~wi!9#et!|ey4tPc#_!OPMzE~alBj$v5!_-61f|<)*)YgnkI0JgC zowMFYw@X)#K8cx9QD40>@Em&0R`u#^lw*Yp>a{b3uIT?W)N6CB=xUSI8`7FXBFof! zV~!#x`m6WG0>{)=?>%`H)K5_#Ic~;5qrCb=ubo7XwyRH8z5<2(R(-NI48PG!op*-E zb1&5wx8S|rTh!loenfOPPyPL3tUoqN{pi3B3^rcs*EQFn8P!z37RDkbB@=m?h;ll* zo|k84Ln80;eEKCMTQIMijrw2W;0>i0h%&12RjR@BoVt92Xi%E&;2ZCOVFPFJz7>mz z&b;8;D>6_;{(Sq`3{+J=-cRksiK#j7r@w=c{m6G51mxv>R{_;fZyYbUJ~V312U{bF zsjB0HH^QK2$NBJ~@HDs?AHMk*x|W^qGk*cfD1+~(fkJ+s$PYS+EG}KlN4!QBKmCD^ zx%M1KFE`#SCZ{@yH|L6Dd^8_ha}rUP8@$6Gj9jV2I}hgLq?O2zJURv66YLiF$y@4R zE}zcNs_IVEq$xkY0x08_^67Ji6Wvnri~A!N!c+JaoAtz0KF)7$gclq3kZ_ll-|F82 zN$3E+gdla}Kf{TbsglF*sdo@ejN$i%Ah)b9`2DlM#34UEXRbF4*YJ5OvCaa)jXyQs zfg5K2bhk316`%6wrq)LHTFe&@LUZbz$=`ZB6tkU%e_9F5{B)at5jX>9!*u>dk{8PK zm4?|hj_CSE7c%-#32PZOtYQ)|-p4g;_CTUYxrQH$8B?y(XqI4|Wto~9E5Nwm`9|Y; zc`K4=nx@Ho+Emq6UX0^m!(sZ&e9fT-Df5Gmn`M5bA~AD%=#&}8^U0Yfw^9`q(U@sVcDbuG#( zMYFC*4?_)_tPzVqZLVh1>ZbUPC{VL`Q3J%hsU~~qUIRpY_$8 zJOK|MwbPtD3n_L!)D*TVgMwApoVQj$Rov2C%xOWi!C!On78p|Q(p>4a7{XFfbN$Ut zBvGp7n-$pTlP@(T4bqT&J2j>AGKu6jHD$vv6XxI4vdg-lz2DOs0>E@}ytdrsI7oUq zZB+*Q(~76ssahxdUtchT1GfTZmGq4vE(D~3gj)~`b+)axE?_k@`kJU-NR zAC`#kbf##-gjTr!Qrmk2l1?>9+dq0cawkqZa54;-H$*#RCXzBZRclhM!Yt{gjrM(l zX?v~Kxp*By%W6LodVCJ0GHJ(!qCDIg?L-?a{MRP!l#Nij^ljQ{iO(>c25RTYOYohK zT)VJiRcQPg?ZQj`Sm23vX$L&FqqBCYc|4Ba?`t#qkAq+pYCo-23rV|9n;nH@_WDk{ zk8$9Ojv*3WmP`1Zn^wq~3J)68)w*z~MZ%(H+T3%VNXEU|yp@RQl_>40k0}q=7UE@>mWL%1_n;lGqId$Fdeu{1urVF21NOZrsE@q;Y$Y=@Y zchRleb`DKymo9617TWW4-R2#8AW+}vcC-v6+Pqn}Q=N^kU=Hh!E~L!LuLQ>#Gier$wjq)dHZD)J^YMeJ!S7Uwz|OY4{TAtiDa~ zEex~g^zD)%-KVeVyZAgp{nwT2gTDsVqZjLYw>pT4q`tm)0E8!@s=iNk++TP^Z}I_U zhtKGvdR)L*-d~?M*8@t}K%d+Mp@^yILPnn>VXgUkVKBSt`r#X%%nKexme?fRg8arH;2zl?nSN*oku!e#xM$}r%Ehx)DgJ0Unp`lC_E>gx^k zSC_#b}VZY<%8-iGpFIXEfJ zF;qWp#Yi>`DBy$Rf}v)~Z3xUxL+#dxP1Gb8G9G6oG#)V23Dx5Zhnt3mbr9pbF@~o5 zP|yDga3RAiGIXfzjV`yu5ZGxtx@fYYYf&Uot-gkSwL!VwZWz)|jX9%_Vdy1{GWDZWm|=E#Z+4j{{!RoJ;=TJ6FC$x8{=-UXeHXd8C%i+IjYg1(oM~s8 zRU6PIFy3Z!n2k|(+enAmE?GY^J|Q~Zm}*Ngjx<@FMyJh~ATb&B3zO~s!8&7FRBmO2*<$or?F8U&F^v+glX{*2AAVJ2| z75-*}PKeG!a)8ld5LOHVjfhhs^34k78{sM$JlpWZL-B8nPRu*}40A=`w+49znVr$` zVtOP*+pLa8#$=1x1lom>rUd8Tn(4|)H|mUyTw7zC-y};=f;GVr|JOXa-Y=l8c;7~G zC=fA80x8~QdXnI}Ou^C?co>5pBm5bG?0L7I65+2Aca1L3M&Y-ZLib&aIPf_Ic_>z4 z3Z9TEvlFgGgOd;(JJ9h<(I8Al>Wf{iu2lqayI&U&uSEN7Sa1Y370nW_tym@+HW#DF zAL1IOyiKd9t~Oho#cT|WN8y=`4rG?uVN7s3jBm5mm|!)cM&DMwr~^i)d6d)GJ2t^$ z_BHm6PjDE;k49jMBgJH~q#7-@Xp_?%Bfk6(^j3dYiPB8Xst9hsm!5xE;Rsd`84)Yj zir=E1b)iwnFen=CiT91*_uq??S-`^%@l}Xnw2MJ0EIq-i1q_O^VMPFcRYii(JOy{wQ4kyL=j{5A~u@vG81E#$Yukexh6nDYgcQUNKr? zqJn=1ICao)+>l=SEz`fG|Nox-)*iOe2^NdV7z9;~wT+U97XG{dk}alav%}Xh+yc5? zMbM{LC_WlvOioi2^ynAb|LaQNAyg)^2xw^!-&QCahEn^70ys%Mk?dlci-G$010x3H zkAfupQISN2`mG}QVyhTz`2P?Z!8I2|_DnY0O@EjAZxzbd6l4EYmHuZ@GKl#f_3MO? zHvEc*AW|i%?(fr1>SLnfn_MD0%=M%wwC|1$DepAcR^d|rik7Aa=Ue^6tPo|6gJen* zgV^zYcCvAz<8Ru%t4$64gT*O-kR-9k{O9(z`7?VZartYDYy7RnX_>9+Rs8euAuS@& z>o5M4y~_8!%CWu_28t~pTR%dXL$j7IMA0@Vk31p4+*$7bj;Z88Z;uid{xDL~6cb zri{S-hcM~4x$>(i6+W<1_F@mvYpAQN$GIi3H4XWMh9alVpM3ITH zp;x;+8kOL1N(o~4S;~In#_w;s{D}RJ{P?|Ui<3x*%j4ho1y?{IVNRwRDyAcZtcNt| zH~O8^zv^bN<3xeMeF8{?zQyv`>0ANjn%-ey4>d_I A{Qv*} delta 6225 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 delta 6101 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 F{{d~5R`mb? diff --git a/src/QupZilla.pro b/src/QupZilla.pro index 0a6e65433..f378970b6 100644 --- a/src/QupZilla.pro +++ b/src/QupZilla.pro @@ -55,6 +55,7 @@ INCLUDEPATH += 3rdparty\ adblock\ desktopnotifications\ opensearch\ + bookmarksimport\ SOURCES += main.cpp\ 3rdparty/qtwin.cpp \ @@ -159,7 +160,11 @@ SOURCES += main.cpp\ opensearch/opensearchenginedelegate.cpp \ opensearch/searchenginesmanager.cpp \ opensearch/searchenginesdialog.cpp \ - opensearch/editsearchengine.cpp + opensearch/editsearchengine.cpp \ + bookmarksimport/firefoximporter.cpp \ + bookmarksimport/chromeimporter.cpp \ + bookmarksimport/operaimporter.cpp \ + bookmarksimport/bookmarksimportdialog.cpp HEADERS += \ 3rdparty/qtwin.h \ @@ -266,7 +271,11 @@ HEADERS += \ opensearch/opensearchenginedelegate.h \ opensearch/searchenginesmanager.h \ opensearch/searchenginesdialog.h \ - opensearch/editsearchengine.h + opensearch/editsearchengine.h \ + bookmarksimport/firefoximporter.h \ + bookmarksimport/chromeimporter.h \ + bookmarksimport/operaimporter.h \ + bookmarksimport/bookmarksimportdialog.h FORMS += \ preferences/autofillmanager.ui \ @@ -306,7 +315,8 @@ FORMS += \ preferences/acceptlanguage.ui \ preferences/addacceptlanguage.ui \ opensearch/searchenginesdialog.ui \ - opensearch/editsearchengine.ui + opensearch/editsearchengine.ui \ + bookmarksimport/bookmarksimportdialog.ui RESOURCES += \ data/icons.qrc \ @@ -378,6 +388,15 @@ message($$DEFINES) + + + + + + + + + diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp index 26bbc90d3..3384131c4 100644 --- a/src/app/mainapplication.cpp +++ b/src/app/mainapplication.cpp @@ -40,6 +40,7 @@ #include "globalfunctions.h" #include "profileupdater.h" #include "searchenginesmanager.h" +#include "operaimporter.h" MainApplication::MainApplication(const QList &cmdActions, int &argc, char **argv) : QtSingleApplication("QupZillaWebBrowser", argc, argv) @@ -275,6 +276,11 @@ void MainApplication::loadSettings() m_downloadManager->loadSettings(); } +void MainApplication::restoreCursor() +{ + QApplication::restoreOverrideCursor(); +} + void MainApplication::setupJumpList() { QtWin::setupJumpList(); diff --git a/src/app/mainapplication.h b/src/app/mainapplication.h index e48691e8a..a1cb498bb 100644 --- a/src/app/mainapplication.h +++ b/src/app/mainapplication.h @@ -108,7 +108,7 @@ signals: private slots: void setupJumpList(); - void restoreCursor() { QApplication::restoreOverrideCursor(); } + void restoreCursor(); private: void connectDatabase(); diff --git a/src/app/qupzilla.cpp b/src/app/qupzilla.cpp index b6e8c555d..41ba3e6e6 100644 --- a/src/app/qupzilla.cpp +++ b/src/app/qupzilla.cpp @@ -57,6 +57,7 @@ #include "navigationbar.h" #include "pagescreen.h" #include "webinspectordockwidget.h" +#include "bookmarksimportdialog.h" const QString QupZilla::VERSION = "1.0.0-rc1"; const QString QupZilla::BUILDTIME = __DATE__" "__TIME__; @@ -240,6 +241,8 @@ void QupZilla::setupMenu() m_menuFile->addAction(tr("Save Page Screen"), this, SLOT(savePageScreen())); m_menuFile->addAction(tr("Send Link..."), this, SLOT(sendLink())); m_menuFile->addAction(QIcon::fromTheme("document-print"), tr("&Print"), this, SLOT(printPage())); m_menuFile->addSeparator(); + m_menuFile->addSeparator(); + m_menuFile->addAction(tr("Import bookmarks..."), this, SLOT(showBookmarkImport())); m_menuFile->addAction(QIcon::fromTheme("application-exit"), tr("Quit"), this, SLOT(quitApp()))->setShortcut(QKeySequence("Ctrl+Q")); menuBar()->addMenu(m_menuFile); @@ -525,15 +528,16 @@ void QupZilla::aboutToShowBookmarksMenu() query.exec("SELECT name FROM folders"); while(query.next()) { - QMenu* tempFolder = new QMenu(query.value(0).toString(), m_menuBookmarks); + QString folderName = query.value(0).toString(); + QMenu* tempFolder = new QMenu(folderName, m_menuBookmarks); tempFolder->setIcon(QIcon(style()->standardIcon(QStyle::SP_DirOpenIcon))); QSqlQuery query2; - query2.exec("SELECT title, url, icon FROM bookmarks WHERE folder='"+query.value(0).toString()+"'"); + query2.exec("SELECT title, url, icon FROM bookmarks WHERE folder='" + folderName + "'"); while(query2.next()) { - QString title = query.value(0).toString(); - QUrl url = query.value(1).toUrl(); - QIcon icon = IconProvider::iconFromBase64(query.value(2).toByteArray()); + QString title = query2.value(0).toString(); + QUrl url = query2.value(1).toUrl(); + QIcon icon = IconProvider::iconFromBase64(query2.value(2).toByteArray()); if (title.length()>40) { title.truncate(40); title+=".."; @@ -923,6 +927,12 @@ void QupZilla::showWebInspector() addDockWidget(Qt::BottomDockWidgetArea, m_webInspectorDock); } +void QupZilla::showBookmarkImport() +{ + BookmarksImportDialog* b = new BookmarksImportDialog(this); + b->show(); +} + void QupZilla::refreshHistory() { m_navigationBar->refreshHistory(); diff --git a/src/app/qupzilla.h b/src/app/qupzilla.h index 879fbf442..410f6a20e 100644 --- a/src/app/qupzilla.h +++ b/src/app/qupzilla.h @@ -160,6 +160,7 @@ private slots: void showStatusbar(); void showClearPrivateData(); void showPreferences(); + void showBookmarkImport(); void refreshHistory(); void bookmarkAllTabs(); diff --git a/src/bookmarks/bookmarksmodel.cpp b/src/bookmarks/bookmarksmodel.cpp index de8b6349e..596a564ad 100644 --- a/src/bookmarks/bookmarksmodel.cpp +++ b/src/bookmarks/bookmarksmodel.cpp @@ -240,6 +240,12 @@ bool BookmarksModel::editBookmark(int id, const QString &title, const QUrl &url, bool BookmarksModel::createFolder(const QString &name) { QSqlQuery query; + query.prepare("SELECT name FROM folders WHERE name = ?"); + query.bindValue(0, name); + query.exec(); + if (query.next()) + return false; + query.prepare("INSERT INTO folders (name) VALUES (?)"); query.bindValue(0, name); if (!query.exec()) diff --git a/src/bookmarks/bookmarksmodel.h b/src/bookmarks/bookmarksmodel.h index 64fb36eda..389f1f264 100644 --- a/src/bookmarks/bookmarksmodel.h +++ b/src/bookmarks/bookmarksmodel.h @@ -37,6 +37,13 @@ public: QString folder; QUrl url; QIcon icon; + + bool operator==(const Bookmark &other) + { + return (this->title == other.title && + this->folder == other.folder && + this->url == other.url); + } }; void loadSettings(); diff --git a/src/bookmarksimport/bookmarksimportdialog.cpp b/src/bookmarksimport/bookmarksimportdialog.cpp new file mode 100644 index 000000000..357b579f2 --- /dev/null +++ b/src/bookmarksimport/bookmarksimportdialog.cpp @@ -0,0 +1,291 @@ +#include "bookmarksimportdialog.h" +#include "ui_bookmarksimportdialog.h" +#include "firefoximporter.h" +#include "chromeimporter.h" +#include "operaimporter.h" +#include "mainapplication.h" + +BookmarksImportDialog::BookmarksImportDialog(QWidget* parent) + : QDialog(parent) + , ui(new Ui::BookmarksImportDialog) + , m_currentPage(0) +{ + setAttribute(Qt::WA_DeleteOnClose); + ui->setupUi(this); + + ui->browserList->setCurrentRow(0); + + connect(ui->nextButton, SIGNAL(clicked()), this, SLOT(nextPage())); + connect(ui->chooseFile, SIGNAL(clicked()), this, SLOT(setFile())); + connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(close())); + connect(ui->stopButton, SIGNAL(clicked()), this, SLOT(stopDownloading())); +} + +void BookmarksImportDialog::nextPage() +{ + switch (m_currentPage) { + case 0: + if (!ui->browserList->currentItem()) + return; + + m_browser = (Browser) (ui->browserList->currentRow()); + setupBrowser(m_browser); + ui->iconLabel->setPixmap(m_browserPixmap); + ui->importingFromLabel->setText(tr("Importing from %1").arg(m_browserName)); + ui->fileText1->setText(m_browserFileText); + ui->fileText2->setText(m_browserFileText2); + ui->standardDirLabel->setText("" + m_standardDir + ""); + ui->nextButton->setEnabled(false); + + m_currentPage++; + ui->stackedWidget->setCurrentIndex(m_currentPage); + break; + + case 1: + if (ui->fileLine->text().isEmpty()) + return; + + if (exportedOK()) { + m_currentPage++; + ui->stackedWidget->setCurrentIndex(m_currentPage); + startFetchingIcons(); + } + break; + + case 2: + addExportedBookmarks(); + close(); + break; + + default: + break; + } +} + +void BookmarksImportDialog::startFetchingIcons() +{ + ui->nextButton->setText(tr("Finish")); + ui->nextButton->setEnabled(false); + ui->progressBar->setValue(0); + ui->progressBar->setMaximum(m_exportedBookmarks.count()); + + int i = 0; + foreach (BookmarksModel::Bookmark b, m_exportedBookmarks) { + QTreeWidgetItem* item = new QTreeWidgetItem(); + item->setText(0, b.title); + item->setIcon(0, QWebSettings::globalSettings()->webGraphic(QWebSettings::DefaultFrameIconGraphic)); + item->setText(1, b.url.toString()); + item->setWhatsThis(0, QString::number(i)); + + ui->treeWidget->addTopLevelItem(item); + i++; + + QWebPage* page = new QWebPage(); + QWebFrame* frame = page->mainFrame(); + frame->load(b.url); + connect(frame, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); + connect(frame, SIGNAL(iconChanged()), this, SLOT(iconChanged())); + QPair pair; + pair.first = frame; + pair.second = b.url; + m_webViews.append(pair); + } +} + +void BookmarksImportDialog::stopDownloading() +{ + ui->nextButton->setEnabled(true); + ui->progressBar->setValue(ui->progressBar->maximum()); +} + +void BookmarksImportDialog::loadFinished() +{ + ui->progressBar->setValue(ui->progressBar->value() + 1); + + if (ui->progressBar->value() == ui->progressBar->maximum()) + ui->nextButton->setEnabled(true); +} + +void BookmarksImportDialog::iconChanged() +{ + QWebFrame* view = qobject_cast(sender()); + if (!view) + return; + + QUrl url; + for (int i = 0; i < m_webViews.count(); i++) { + QPair pair = m_webViews.at(i); + if (pair.first == view) { + url = pair.second; + break; + } + } + + if (url.isEmpty()) + return; + + QList items = ui->treeWidget->findItems(url.toString(), Qt::MatchExactly, 1); + if (items.count() == 0) + return; + + QTreeWidgetItem* item = items.at(0); + + item->setIcon(0, view->icon()); + + foreach (BookmarksModel::Bookmark b, m_exportedBookmarks) { + if (b.url == url) { + m_exportedBookmarks.removeOne(b); + b.icon = view->icon(); + m_exportedBookmarks.append(b); + break; + } + } +} + +bool BookmarksImportDialog::exportedOK() +{ + if (m_browser == Firefox) { + FirefoxImporter firefox(this); + firefox.setFile(ui->fileLine->text()); + if (firefox.openDatabase()) + m_exportedBookmarks = firefox.exportBookmarks(); + + if (firefox.error()) { + QMessageBox::critical(this, tr("Error!"), firefox.errorString()); + return false; + } + return true; + } else if (m_browser == Chrome) { + ChromeImporter chrome(this); + chrome.setFile(ui->fileLine->text()); + if (chrome.openFile()) + m_exportedBookmarks = chrome.exportBookmarks(); + + if (chrome.error()) { + QMessageBox::critical(this, tr("Error!"), chrome.errorString()); + return false; + } + return true; + } else if (m_browser == Opera) { + OperaImporter opera(this); + opera.setFile(ui->fileLine->text()); + if (opera.openFile()) + m_exportedBookmarks = opera.exportBookmarks(); + + if (opera.error()) { + QMessageBox::critical(this, tr("Error!"), opera.errorString()); + return false; + } + return true; + } + + return false; +} + +void BookmarksImportDialog::setFile() +{ +#ifdef Q_WS_WIN + if (m_browser == IE) { + QString path = QFileDialog::getExistingDirectory(this, tr("Choose directory...")); + if (!path.isEmpty()) + ui->fileLine->setText(path); + } else +#endif + { + QString path = QFileDialog::getOpenFileName(this, tr("Choose file..."), QDir::homePath(), m_browserBookmarkFile); + if (!path.isEmpty()) + ui->fileLine->setText(path); + } + + ui->nextButton->setEnabled(!ui->fileLine->text().isEmpty()); +} + +void BookmarksImportDialog::addExportedBookmarks() +{ + qApp->setOverrideCursor(Qt::WaitCursor); + + BookmarksModel* model = mApp->bookmarksModel(); + + if (m_exportedBookmarks.count() > 0) + model->createFolder(m_exportedBookmarks.at(0).folder); + + foreach (BookmarksModel::Bookmark b, m_exportedBookmarks) + model->saveBookmark(b.url, b.title, b.icon, b.folder); + + qApp->restoreOverrideCursor(); +} + +void BookmarksImportDialog::setupBrowser(Browser browser) +{ + switch (browser) { + case Firefox: + m_browserPixmap = QPixmap(":icons/browsers/firefox.png"); + m_browserName = "Mozilla Firefox"; + m_browserBookmarkFile = "places.sqlite"; + m_browserFileText = tr("Mozilla Firefox stores its bookmarks in places.sqlite SQLite database. " + "This file is usually located in "); + m_browserFileText2 = tr("Please choose this file to begin importing bookmarks."); + m_standardDir = +#ifdef Q_WS_WIN + "%APPDATA%/Mozilla/"; +#else + "/home/user/.mozilla/firefox/profilename/"; +#endif + break; + + case Chrome: + m_browserPixmap = QPixmap(":icons/browsers/chrome.png"); + m_browserName = "Google Chrome"; + m_browserBookmarkFile = "Bookmarks"; + m_browserFileText = tr("Google Chrome stores its bookmarks in Bookmarks text file. " + "This file is usually located in "); + m_browserFileText2 = tr("Please choose this file to begin importing bookmarks."); + m_standardDir = +#ifdef Q_WS_WIN + "%APPDATA%/Opera/"; +#else + "/home/user/.config/chrome/Default/"; +#endif + + break; + + case Opera: + m_browserPixmap = QPixmap(":icons/browsers/opera.png"); + m_browserName = "Opera"; + m_browserBookmarkFile = "bookmarks.adr"; + m_browserFileText = tr("Opera stores its bookmarks in bookmarks.adr text file. " + "This file is usually located in "); + m_browserFileText2 = tr("Please choose this file to begin importing bookmarks."); + m_standardDir = +#ifdef Q_WS_WIN + "%APPDATA%/Chrome/Default/"; +#else + "/home/user/.opera/"; +#endif + break; + + case IE: + m_browserPixmap = QPixmap(":icons/browsers/ie.png"); + m_browserName = "Internet Explorer"; + m_browserFileText = tr("Internet Explorer stores its bookmarks in Favorites folder. " + "This folder is usually located in "); + m_browserFileText2 = tr("Please choose this folder to begin importing bookmarks."); + m_standardDir = "C:\\Users\\username\\Favorites\\"; + break; + + default: + break; + } +} + +BookmarksImportDialog::~BookmarksImportDialog() +{ + if (m_webViews.count() > 0) { + for (int i = 0; i < m_webViews.count(); i++) {tr(""); + QWebFrame* frame= m_webViews.at(i).first; + delete frame->page(); + } + } + + delete ui; +} diff --git a/src/bookmarksimport/bookmarksimportdialog.h b/src/bookmarksimport/bookmarksimportdialog.h new file mode 100644 index 000000000..5263b09b7 --- /dev/null +++ b/src/bookmarksimport/bookmarksimportdialog.h @@ -0,0 +1,60 @@ +#ifndef BOOKMARKSIMPORTDIALOG_H +#define BOOKMARKSIMPORTDIALOG_H + +#include +#include +#include +#include +#include +#include +#include + +#include "bookmarksmodel.h" + +namespace Ui { + class BookmarksImportDialog; +} + +class BookmarksImportDialog : public QDialog +{ + Q_OBJECT + +public: + explicit BookmarksImportDialog(QWidget* parent = 0); + ~BookmarksImportDialog(); + +private slots: + void nextPage(); + void setFile(); + + + void stopDownloading(); + void iconChanged(); + void loadFinished(); + +private: + enum Browser { Firefox = 0, Chrome = 1, Opera = 2, IE = 3}; + + void setupBrowser(Browser browser); + bool exportedOK(); + void startFetchingIcons(); + void addExportedBookmarks(); + + Ui::BookmarksImportDialog *ui; + + int m_currentPage; + Browser m_browser; + QString m_browserName; + QString m_browserFileText; + QString m_browserFileText2; + QString m_standardDir; + + QPixmap m_browserPixmap; + QString m_browserBookmarkFile; + + QList m_exportedBookmarks; + + QList > m_webViews; +}; + +#endif // BOOKMARKSIMPORTDIALOG_H diff --git a/src/bookmarksimport/bookmarksimportdialog.ui b/src/bookmarksimport/bookmarksimportdialog.ui new file mode 100644 index 000000000..0742e6756 --- /dev/null +++ b/src/bookmarksimport/bookmarksimportdialog.ui @@ -0,0 +1,347 @@ + + + BookmarksImportDialog + + + + 0 + 0 + 505 + 329 + + + + Import Bookmarks + + + + + + <b>Import Bookmarks</b> + + + + + + + 0 + + + + + + + + 48 + 48 + + + + + Mozilla Firefox + + + + :/icons/browsers/firefox.png:/icons/browsers/firefox.png + + + + + Google Chrome + + + + :/icons/browsers/chrome.png:/icons/browsers/chrome.png + + + + + Opera + + + + :/icons/browsers/opera.png:/icons/browsers/opera.png + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + Choose browser from which you want to import bookmarks: + + + + + + + + + + + + 48 + 48 + + + + + 48 + 48 + + + + + + + + + + + + + false + + + + + + + Choose... + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Fetching icons, please wait... + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + 24 + + + + + + + + + + + :/icons/faenza/stop.png:/icons/faenza/stop.png + + + + 16 + 16 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + + + + 220 + + + + Title + + + + + Url + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Next + + + + + + + Cancel + + + + + + + + + + + + diff --git a/src/bookmarksimport/chromeimporter.cpp b/src/bookmarksimport/chromeimporter.cpp new file mode 100644 index 000000000..6b18d03bc --- /dev/null +++ b/src/bookmarksimport/chromeimporter.cpp @@ -0,0 +1,73 @@ +#include "chromeimporter.h" +#include "globalfunctions.h" + +#include + +ChromeImporter::ChromeImporter(QObject* parent) + : QObject(parent) + , m_error(false) + , m_errorString(tr("No Error")) +{ +} + +void ChromeImporter::setFile(const QString &path) +{ + m_path = path; +} + +bool ChromeImporter::openFile() +{ + m_file.setFileName(m_path); + + if (!m_file.open(QFile::ReadOnly)) { + m_error = true; + m_errorString = tr("Unable to open file."); + return false; + } + + return true; +} + +QList ChromeImporter::exportBookmarks() +{ + QList list; + + QString bookmarks = m_file.readAll(); + m_file.close(); + + QStringList parsedBookmarks; + QRegExp rx("\\{(\\s*)\"date_added(.*)\"(\\s*)\\}", Qt::CaseSensitive); + rx.setMinimal(true); + + int pos = 0; + while ((pos = rx.indexIn(bookmarks, pos)) != -1) { + parsedBookmarks << rx.cap(0); + pos += rx.matchedLength(); + } + + QScriptEngine* scriptEngine = new QScriptEngine(); + foreach (QString parsedString, parsedBookmarks) { + parsedString = "(" + parsedString + ")"; + if (scriptEngine->canEvaluate(parsedString)) { + QScriptValue object = scriptEngine->evaluate(parsedString); + QString name = object.property("name").toString(); + QString url = object.property("url").toString(); + + if (name.isEmpty() || url.isEmpty()) + continue; + + BookmarksModel::Bookmark b; + b.folder = "Chrome Import"; + b.title = name; + b.url = url; + + list.append(b); + } else { + m_error = true; + m_errorString = tr("Cannot evaluate JSON code."); + } + } + + return list; +} + diff --git a/src/bookmarksimport/chromeimporter.h b/src/bookmarksimport/chromeimporter.h new file mode 100644 index 000000000..0e54257ab --- /dev/null +++ b/src/bookmarksimport/chromeimporter.h @@ -0,0 +1,40 @@ +#ifndef CHROMEIMPORTER_H +#define CHROMEIMPORTER_H + +#include +#include +#include +#include +#include +#include + +#include "bookmarksmodel.h" + +class ChromeImporter : public QObject +{ + Q_OBJECT +public: + explicit ChromeImporter(QObject* parent = 0); + + void setFile(const QString &path); + bool openFile(); + + QList exportBookmarks(); + + bool error() { return m_error; } + QString errorString() { return m_errorString; } + +signals: + +public slots: + +private: + QString m_path; + QFile m_file; + + bool m_error; + QString m_errorString; + +}; + +#endif // CHROMEIMPORTER_H diff --git a/src/bookmarksimport/firefoximporter.cpp b/src/bookmarksimport/firefoximporter.cpp new file mode 100644 index 000000000..00ab381a3 --- /dev/null +++ b/src/bookmarksimport/firefoximporter.cpp @@ -0,0 +1,74 @@ +#include "firefoximporter.h" + +#include +#include + +FirefoxImporter::FirefoxImporter(QObject *parent) + : QObject(parent) + , m_error(false) + , m_errorString(tr("No Error")) +{ +} + +void FirefoxImporter::setFile(const QString &path) +{ + m_path = path; +} + +bool FirefoxImporter::openDatabase() +{ + db = QSqlDatabase::cloneDatabase(QSqlDatabase::database(), "import"); + + if (!QFile::exists(m_path)) { + m_error = true; + m_errorString = tr("File does not exists."); + return false; + } + db.setDatabaseName(m_path); + bool open = db.open(); + + if (!open) { + m_error = true; + m_errorString = tr("Unable to open database. Is Firefox running?"); + return false; + } + + return true; +} + +QList FirefoxImporter::exportBookmarks() +{ + QList list; + + QSqlQuery query(db); + query.exec("SELECT title, fk FROM moz_bookmarks WHERE title != ''"); + while(query.next()) { + QString title = query.value(0).toString(); + int placesId = query.value(1).toInt(); + + QSqlQuery query2(db); + query2.exec("SELECT url FROM moz_places WHERE id=" + QString::number(placesId)); + + if (!query2.next()) + continue; + + QString url = query2.value(0).toString(); + + if (title.isEmpty() || url.isEmpty() || url.startsWith("place:")) + continue; + + BookmarksModel::Bookmark b; + b.folder = "Firefox Import"; + b.title = title; + b.url = url; + + list.append(b); + } + + if (query.lastError().isValid()) { + m_error = true; + m_errorString = query.lastError().text(); + } + + return list; +} diff --git a/src/bookmarksimport/firefoximporter.h b/src/bookmarksimport/firefoximporter.h new file mode 100644 index 000000000..b222be380 --- /dev/null +++ b/src/bookmarksimport/firefoximporter.h @@ -0,0 +1,38 @@ +#ifndef FIREFOXIMPORTER_H +#define FIREFOXIMPORTER_H + +#include +#include +#include +#include + +#include "bookmarksmodel.h" + +class FirefoxImporter : public QObject +{ + Q_OBJECT +public: + explicit FirefoxImporter(QObject* parent = 0); + + void setFile(const QString &path); + bool openDatabase(); + + QList exportBookmarks(); + + bool error() { return m_error; } + QString errorString() { return m_errorString; } + +signals: + +public slots: + +private: + QString m_path; + QSqlDatabase db; + + bool m_error; + QString m_errorString; + +}; + +#endif // FIREFOXIMPORTER_H diff --git a/src/bookmarksimport/operaimporter.cpp b/src/bookmarksimport/operaimporter.cpp new file mode 100644 index 000000000..70c053efe --- /dev/null +++ b/src/bookmarksimport/operaimporter.cpp @@ -0,0 +1,66 @@ +#include "operaimporter.h" + +#include + +OperaImporter::OperaImporter(QObject* parent) + : QObject(parent) + , m_error(false) + , m_errorString(tr("No Error")) +{ +} + +void OperaImporter::setFile(const QString &path) +{ + m_path = path; +} + +bool OperaImporter::openFile() +{ + m_file.setFileName(m_path); + + if (!m_file.open(QFile::ReadOnly)) { + m_error = true; + m_errorString = tr("Unable to open file."); + return false; + } + + return true; +} + +QList OperaImporter::exportBookmarks() +{ + QList list; + + QString bookmarks = m_file.readAll(); + m_file.close(); + + QRegExp rx("#URL(.*)CREATED", Qt::CaseSensitive); + rx.setMinimal(true); + + int pos = 0; + while ((pos = rx.indexIn(bookmarks, pos)) != -1) { + QString string = rx.cap(1); + pos += rx.matchedLength(); + + QRegExp rx2("NAME=(.*)\\n"); + rx2.setMinimal(true); + rx2.indexIn(string); + QString name = rx2.cap(1); + + rx2.setPattern("URL=(.*)\\n"); + rx2.indexIn(string); + QString url = rx2.cap(1); + + if (name.isEmpty() || url.isEmpty()) + continue; + + BookmarksModel::Bookmark b; + b.folder = "Opera Import"; + b.title = name; + b.url = url; + + list.append(b); + } + + return list; +} diff --git a/src/bookmarksimport/operaimporter.h b/src/bookmarksimport/operaimporter.h new file mode 100644 index 000000000..be3c0dd44 --- /dev/null +++ b/src/bookmarksimport/operaimporter.h @@ -0,0 +1,36 @@ +#ifndef OPERAIMPORTER_H +#define OPERAIMPORTER_H + +#include +#include + +#include "bookmarksmodel.h" + +class OperaImporter : public QObject +{ + Q_OBJECT +public: + explicit OperaImporter(QObject* parent = 0); + + void setFile(const QString &path); + bool openFile(); + + QList exportBookmarks(); + + bool error() { return m_error; } + QString errorString() { return m_errorString; } + +signals: + +public slots: + +private: + QString m_path; + QFile m_file; + + bool m_error; + QString m_errorString; + +}; + +#endif // OPERAIMPORTER_H diff --git a/src/data/icons.qrc b/src/data/icons.qrc index 7179eb0b7..4a190fbf9 100644 --- a/src/data/icons.qrc +++ b/src/data/icons.qrc @@ -63,5 +63,8 @@ icons/menu/gear.png icons/menu/wikipedia.png icons/menu/yahoo.png + icons/browsers/firefox.png + icons/browsers/chrome.png + icons/browsers/opera.png diff --git a/src/data/icons/browsers/chrome.png b/src/data/icons/browsers/chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..1928880f7c64a189e10f420aaf6d611b161e1ea9 GIT binary patch literal 3809 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 SIe*ju0000Upravit záložku + + BookmarksImportDialog + + + Import Bookmarks + Import záložek + + + + <b>Import Bookmarks</b> + <b>Import záložek</b> + + + + Choose browser from which you want to import bookmarks: + Vyberte ze kterého prohlížeče chcete importovat záložky: + + + + Choose... + Vybrat... + + + + Fetching icons, please wait... + Získávám ikony, prosím čekejte... + + + + Title + Titulek + + + + Url + Adresa + + + + Next + Další + + + + Cancel + Zrušit + + + + <b>Importing from %1</b> + <b>Importuji z %1</b> + + + + Finish + Dokončit + + + + + + Error! + Chyba! + + + + Choose directory... + Zvolte složku... + + + + Choose file... + Vyberte soubor... + + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database. This file is usually located in + Mozilla Firefox ukládá své záložky v SQLite databázi <b>places.sqlite</b>. Tento soubor se obvykle nachází v + + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. This file is usually located in + Google Chrome ukládá své záložky v textovém souboru <b>Bookmarks</b>. Tento soubor se obvykle nachází v + + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file. This file is usually located in + Opera ukládá své záložky v textovém souboru <b>bookmarks.adr</b>. Tento soubor se obvykle nachází v + + + + Internet Explorer stores its bookmarks in <b>Favorites</b> folder. This folder is usually located in + Internet Explorer ukládá své záložky ve složce <b>Oblíbené</b>. Tato složka se obvykle nachází v + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database.This file is usually located in + Mozzila Firefox ukládá své záložky v SQLite databázi <b>places.sqlite</b>. Tento soubor se obvykle nachází v + + + + + + Please choose this file to begin importing bookmarks. + Vyberte prosím tento soubor pro zahájení importu. + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file.This file is usually located in + Google Chrome ukládá své záložky v textovém souboru <b>Bookmarks</b>. Tento soubor je obvykle nachází v + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file.This file is usually located in + Opera ukládá své záložky v textovém souboru <b>bookmarks.adr</b>. Tento soubor se obvykle nachází v + + + + Please choose this folder to begin importing bookmarks. + Vyberte prosím tuto složku pro zahájení importu. + + BookmarksManager @@ -459,22 +578,22 @@ p, li { white-space: pre-wrap; } BookmarksModel - - - + + + Bookmarks In Menu Záložky v menu - - - + + + Bookmarks In ToolBar Panel záložek - - + + Unsorted Bookmarks Nesetříděné záložky @@ -720,6 +839,24 @@ p, li { white-space: pre-wrap; } <není součástí certifikátu> + + ChromeImporter + + + No Error + Žádná chyba + + + + Unable to open file. + Nepodařilo se otevřít soubor. + + + + Cannot evaluate JSON code. + Nelze spustit JSON kód. + + ClearPrivateData @@ -1249,6 +1386,24 @@ nebyl nalezen! Vybrat ikonu... + + FirefoxImporter + + + No Error + Žádná chyba + + + + File does not exists. + Soubor neexistuje. + + + + Unable to open database. Is Firefox running? + Nepodařilo se otevřít databázi. Je Firefox spuštěn? + + HistoryManager @@ -1486,12 +1641,12 @@ nebyl nalezen! MainApplication - + Last session crashed Poslední relace spadla - + <b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state? <b>QupZilla spadla :-(</b><br/>Oops, poslední relace QupZilly skončila jejím pádem. Velice se omlouváme. Přejete si obnovit uložený stav? @@ -1605,6 +1760,19 @@ nebyl nalezen! Proxy %1 požaduje uživatelské jméno a heslo. + + OperaImporter + + + No Error + Žádná chyba + + + + Unable to open file. + Nepodařilo se otevřít soubor. + + PageScreen @@ -2438,252 +2606,257 @@ nebyl nalezen! QupZilla - + File Soubor - + Edit Úpravy - + Tools Nástroje - + Help Nápověda - + View Zobrazení - - + + Bookmarks Záložky - - + + History Historie - + Quit Konec - + New Tab Nový panel - + Close Tab Zavřít panel - + IP Address of current page IP Adresa aktuální stránky - + &New Window &Nové okno - + Open &File Otevřít &soubor - + &Save Page As... &Uložit stránku jako... - + &Print &Tisk - + + Import bookmarks... + Importovat záložky... + + + &Undo &Zpět - + &Redo &Vpřed - + &Cut V&yjmout - + C&opy &Kopírovat - + &Paste V&ložit - + &Delete &Odstranit - + Select &All Vyb&rat vše - + &Find &Najít - + &Navigation Toolbar &Navigační lišta - + &Bookmarks Toolbar Panel &záložek - + Sta&tus Bar Sta&tus bar - + Toolbars Nástrojové lišty - + Sidebars Postranní lišta - + &Page Source Zdrojový &kód stránky - + &Menu Bar &Menu - + &Fullscreen &Celá obrazovka - + &Stop Z&astavit - + &Reload O&bnovit - + Character &Encoding Kó&dování znaků - + Zoom &In Zoo&m + - + Zoom &Out Z&oom - - + Reset Původní - + Close Window Zavřít okno - + Open Location Otevřít adresu - + Send Link... Poslat odkaz... - + Other Ostatní - + Default Defaultní - + Current cookies cannot be accessed. Současné cookies nejsou dostupné. - + Your session is not stored. Vaše relace není uložena. - + Start Private Browsing Spustit anonymní prohlížení - + Private Browsing Enabled Soukromé prohlížení zapnuto - + Restore &Closed Tab Obnovit zavř&ený panel - + Bookmarks In ToolBar Bookmarks In Toolbar Panel záložek - - - + + + Empty Prázdný @@ -2693,128 +2866,128 @@ nebyl nalezen! Nový panel - + Bookmark &This Page Přidat &stránku do záložek - + Bookmark &All Tabs Přidat &všechny panely do záložek - + Organize &Bookmarks Organizovat &záložky - + &Back &Zpět - + &Forward &Vpřed - + &Home &Domů - + Show &All History Zobrazit celou &historii - + Closed Tabs Zavřené panely - + Save Page Screen Uložit snímek stránky - - + + (Private Browsing) (Soukromé prohlížení) - + Restore All Closed Tabs Obnovit všechny zavřené panely - + Clear list Vyčistit seznam - + About &Qt O &Qt - + &About QupZilla &O QupZille - + Informations about application Informace o aplikaci - + Report &Issue Nahlásit &problém - + &Web Search Hledání na &webu - + Page &Info Informace o &stránce - + &Download Manager Správce s&tahování - + &Cookies Manager Správce coo&kies - + &AdBlock &AdBlock - + RSS &Reader &RSS čtečka - + Clear Recent &History Vymazat nedá&vnou historii - + &Private Browsing Soukromé prohlíž&ení - + Pr&eferences Předvo&lby @@ -2823,32 +2996,32 @@ nebyl nalezen! Web Inspektor - + Open file... Otevřít soubor... - + Are you sure you want to turn on private browsing? Jste si jistý že chcete zapnout soukromé prohlížení? - + When private browsing is turned on, some actions concerning your privacy will be disabled: Se zapnutým soukromým prohlížením jsou některé akce týkající se soukromí vypnuty: - + Webpages are not added to the history. Stránky nejsou přidávány do historie. - + Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened. Než zavřete prohlížeč, stále můžete použít tlačítka Zpět a Vpřed k vrácení se na stránky které jste otevřeli. - + There are still %1 open tabs and your session won't be stored. Are you sure to quit? Ještě je otevřeno %1 panelů a Vaše relace nebude uložena. Opravdu chcete skončit? diff --git a/translations/de_DE.ts b/translations/de_DE.ts index f352bbc8d..615e4f7f2 100644 --- a/translations/de_DE.ts +++ b/translations/de_DE.ts @@ -342,6 +342,113 @@ p, li { white-space: pre-wrap; } Dieses Lesezeichen bearbeiten + + BookmarksImportDialog + + + Import Bookmarks + + + + + <b>Import Bookmarks</b> + + + + + Choose browser from which you want to import bookmarks: + + + + + Choose... + + + + + Fetching icons, please wait... + + + + + Title + Titel + + + + Url + Url + + + + Next + + + + + Cancel + + + + + <b>Importing from %1</b> + + + + + Finish + + + + + + + Error! + Fehler! + + + + Choose directory... + + + + + Choose file... + Datei wählen... + + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database. This file is usually located in + + + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. This file is usually located in + + + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file. This file is usually located in + + + + + Internet Explorer stores its bookmarks in <b>Favorites</b> folder. This folder is usually located in + + + + + + + Please choose this file to begin importing bookmarks. + + + + + Please choose this folder to begin importing bookmarks. + + + BookmarksManager @@ -463,22 +570,22 @@ p, li { white-space: pre-wrap; } BookmarksModel - - - + + + Bookmarks In Menu Lesezeichen im Menü - - - + + + Bookmarks In ToolBar Lesezeichen in Werkzeug-Leiste - - + + Unsorted Bookmarks Unsortierte Lesezeichen @@ -724,6 +831,24 @@ p, li { white-space: pre-wrap; } <Im Zertifkat nicht vorhanden> + + ChromeImporter + + + No Error + Kein Fehler + + + + Unable to open file. + + + + + Cannot evaluate JSON code. + + + ClearPrivateData @@ -1252,6 +1377,24 @@ p, li { white-space: pre-wrap; } + + FirefoxImporter + + + No Error + Kein Fehler + + + + File does not exists. + + + + + Unable to open database. Is Firefox running? + + + HistoryManager @@ -1488,12 +1631,12 @@ p, li { white-space: pre-wrap; } MainApplication - + Last session crashed Die letzte Sitzung wurde unerwartet beendet - + <b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state? <b>QupZilla ist abgestürzt :-(</b><br/>Hoppla,die letzte Sitzung wurde unerwartet beendet. Verzeihung. Möchten Sie den letzten Status wiederherstellen? @@ -1607,6 +1750,19 @@ p, li { white-space: pre-wrap; } Bitte Nutzername und Passwort zur Anmeldung an Proxy %1 angeben. + + OperaImporter + + + No Error + Kein Fehler + + + + Unable to open file. + + + PageScreen @@ -2440,251 +2596,256 @@ p, li { white-space: pre-wrap; } QupZilla - + File Datei - + Edit Bearbeiten - + Tools Werkzeuge - + Help Hilfe - + View Ansicht - - + + Bookmarks Lesezeichen - - + + History Verlauf - + Quit Beenden - + New Tab Neuer Tab - + Close Tab Tab schließen - + IP Address of current page IP Adresse der aktuellen Seite - + &New Window Neues &Fenster - + Open &File Datei ö&ffnen - + &Save Page As... Seite speichern &unter... - + &Print &Drucken - + + Import bookmarks... + + + + &Undo &Rückgängig - + &Redo &Wiederherstellen - + &Cut &Ausschneiden - + C&opy &Kopieren - + &Paste E&infügen - + &Delete &Löschen - + Select &All Alles au&swählen - + &Find &Suchen - + &Navigation Toolbar &Navigations-Symbolleiste - + &Bookmarks Toolbar &Lesezeichen-Werkzeug-Leiste - + Sta&tus Bar Sta&tus-Leiste - + Toolbars Werkzeugleisten - + Sidebars Seiten-Leiste - + &Page Source Seiten-&Quelltext - + &Menu Bar &Menü-Leiste - + &Fullscreen &Vollbild - + &Stop &Stopp - + &Reload &Neu laden - + Character &Encoding &Zeichenkodierung - + Zoom &In Ver&größern - + Zoom &Out Ver&kleinern - + Reset Zurücksetzen - + Close Window Fenster schließen - + Open Location Adresse aufrufen - + Send Link... Link senden... - + Other Andere - + Default Standard - + Current cookies cannot be accessed. Auf aktuelle Cookies kann nicht zugegriffen werden. - + Your session is not stored. Ihre Sitzung wird nicht gespeichert. - + Start Private Browsing Privaten Modus starten - + Private Browsing Enabled Privater Modus aktiv - + Restore &Closed Tab Geschlossenen Tab &wiederherstellen - + Bookmarks In ToolBar Lesezeichen in Werkzeug-Leiste - - - + + + Empty Leer @@ -2694,128 +2855,128 @@ p, li { white-space: pre-wrap; } Neuer Tab - + Bookmark &This Page &Lesezeichen für diese Seite hinzufügen - + Bookmark &All Tabs Lesezeichen für alle &geöffneten Tabs hinzufügen - + Organize &Bookmarks Bookmarks &bearbeiten - + &Back &Zurück - + &Forward &Vor - + &Home &Startseite - + Show &All History &Vollständigen Verlauf anzeigen - + Closed Tabs Geschlossene Tabs - + Save Page Screen Bildschirmseite speichern - - + + (Private Browsing) (Privater Modus) - + Restore All Closed Tabs Alle geschlossenen Tabs wiederherstellen - + Clear list Liste leeren - + About &Qt Üb&er Qt - + &About QupZilla Über Qup&Zilla - + Informations about application Informationen über QupZilla - + Report &Issue &Fehlerbericht senden - + &Web Search Web&suche - + Page &Info S&eiteninformationen anzeigen - + &Download Manager &Download Manager - + &Cookies Manager &Cookie Manager - + &AdBlock &AdBlock - + RSS &Reader RSS &Reader - + Clear Recent &History &Verlauf löschen - + &Private Browsing &Privater Modus - + Pr&eferences &Einstellungen @@ -2824,32 +2985,32 @@ p, li { white-space: pre-wrap; } Web Inspector - + Open file... Datei öffnen... - + Are you sure you want to turn on private browsing? Möchten Sie wirklich den privaten Modus starten? - + When private browsing is turned on, some actions concerning your privacy will be disabled: Wenn der private Modus aktiv ist, stehen einige Aktionen nicht zur Verfügung: - + Webpages are not added to the history. Webseiten werden nicht zum Verlauf hinzugefügt. - + Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened. Solange dieses Fenster geöffnet ist, können Sie über die Symbole "Zurück" und "Vor" zu den Webseiten zurückkehren, die Sie geöffnet haben. - + There are still %1 open tabs and your session won't be stored. Are you sure to quit? Es sind noch %1 Tabs geöffnet und Ihre Sitzung wird nicht gespeichert. Möchten Sie QupZilla wirklich beenden? diff --git a/translations/es.ts b/translations/es.ts index 7b4a48f21..11dfd5b44 100644 --- a/translations/es.ts +++ b/translations/es.ts @@ -330,6 +330,113 @@ p, li { white-space: pre-wrap; } + + BookmarksImportDialog + + + Import Bookmarks + + + + + <b>Import Bookmarks</b> + + + + + Choose browser from which you want to import bookmarks: + + + + + Choose... + + + + + Fetching icons, please wait... + + + + + Title + + + + + Url + + + + + Next + + + + + Cancel + + + + + <b>Importing from %1</b> + + + + + Finish + + + + + + + Error! + + + + + Choose directory... + + + + + Choose file... + + + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database. This file is usually located in + + + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. This file is usually located in + + + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file. This file is usually located in + + + + + Internet Explorer stores its bookmarks in <b>Favorites</b> folder. This folder is usually located in + + + + + + + Please choose this file to begin importing bookmarks. + + + + + Please choose this folder to begin importing bookmarks. + + + BookmarksManager @@ -451,22 +558,22 @@ p, li { white-space: pre-wrap; } BookmarksModel - - - + + + Bookmarks In Menu - - - + + + Bookmarks In ToolBar - - + + Unsorted Bookmarks @@ -708,6 +815,24 @@ p, li { white-space: pre-wrap; } + + ChromeImporter + + + No Error + + + + + Unable to open file. + + + + + Cannot evaluate JSON code. + + + ClearPrivateData @@ -1234,6 +1359,24 @@ p, li { white-space: pre-wrap; } + + FirefoxImporter + + + No Error + + + + + File does not exists. + + + + + Unable to open database. Is Firefox running? + + + HistoryManager @@ -1461,12 +1604,12 @@ p, li { white-space: pre-wrap; } MainApplication - + Last session crashed - + <b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state? @@ -1580,6 +1723,19 @@ p, li { white-space: pre-wrap; } + + OperaImporter + + + No Error + + + + + Unable to open file. + + + PageScreen @@ -2399,407 +2555,412 @@ p, li { white-space: pre-wrap; } QupZilla - + Private Browsing Enabled - + IP Address of current page - + Tools - + Help - - + + Bookmarks - - + + History - + File - + &New Window - + New Tab - + Open Location - + Open &File - + Close Tab - + Close Window - + &Save Page As... - + Save Page Screen - + Send Link... - + &Print - - Quit + + Import bookmarks... + Quit + + + + Edit - + &Undo - + &Redo - + &Cut - + C&opy - + &Paste - + &Delete - + Select &All - + &Find - + View - + &Navigation Toolbar - + &Bookmarks Toolbar - + Sta&tus Bar - + &Menu Bar - + &Fullscreen - + &Stop - + &Reload - + Character &Encoding - + Toolbars - + Sidebars - + Zoom &In - + Zoom &Out - + Reset - + &Page Source - + Closed Tabs - + Restore &Closed Tab - - + + (Private Browsing) - + Bookmark &This Page - + Bookmark &All Tabs - + Organize &Bookmarks - + Bookmarks In ToolBar - - - + + + Empty - + &Back - + &Forward - + &Home - + Show &All History - + Restore All Closed Tabs - + Clear list - + About &Qt - + &About QupZilla - + Informations about application - + Report &Issue - + &Web Search - + Page &Info - + &Download Manager - + &Cookies Manager - + &AdBlock - + RSS &Reader - + Clear Recent &History - + &Private Browsing - + Pr&eferences - + Other - + Default - + Open file... - + Are you sure you want to turn on private browsing? - + When private browsing is turned on, some actions concerning your privacy will be disabled: - + Webpages are not added to the history. - + Current cookies cannot be accessed. - + Your session is not stored. - + Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened. - + Start Private Browsing - + There are still %1 open tabs and your session won't be stored. Are you sure to quit? diff --git a/translations/nl_NL.ts b/translations/nl_NL.ts index fa5c8e7d6..6b2efd132 100644 --- a/translations/nl_NL.ts +++ b/translations/nl_NL.ts @@ -338,6 +338,113 @@ p, li { white-space: pre-wrap; } Bewerk deze bladwijzer + + BookmarksImportDialog + + + Import Bookmarks + + + + + <b>Import Bookmarks</b> + + + + + Choose browser from which you want to import bookmarks: + + + + + Choose... + + + + + Fetching icons, please wait... + + + + + Title + Titel + + + + Url + URL + + + + Next + + + + + Cancel + + + + + <b>Importing from %1</b> + + + + + Finish + + + + + + + Error! + Fout! + + + + Choose directory... + + + + + Choose file... + Kies bestand... + + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database. This file is usually located in + + + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. This file is usually located in + + + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file. This file is usually located in + + + + + Internet Explorer stores its bookmarks in <b>Favorites</b> folder. This folder is usually located in + + + + + + + Please choose this file to begin importing bookmarks. + + + + + Please choose this folder to begin importing bookmarks. + + + BookmarksManager @@ -459,22 +566,22 @@ p, li { white-space: pre-wrap; } BookmarksModel - - - + + + Bookmarks In Menu Bladwijzers in menu - - - + + + Bookmarks In ToolBar Bladwijzers op werkbalk - - + + Unsorted Bookmarks Ongesorteerde bladwijzers @@ -720,6 +827,24 @@ p, li { white-space: pre-wrap; } <niet aangegeven in certificaat> + + ChromeImporter + + + No Error + Geen fout + + + + Unable to open file. + + + + + Cannot evaluate JSON code. + + + ClearPrivateData @@ -1249,6 +1374,24 @@ werd niet gevonden! + + FirefoxImporter + + + No Error + Geen fout + + + + File does not exists. + + + + + Unable to open database. Is Firefox running? + + + HistoryManager @@ -1486,12 +1629,12 @@ werd niet gevonden! MainApplication - + Last session crashed Laatste sessie gecrashed - + <b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state? <b>QupZilla crashte :-(</b><br/>Oeps, de laatste sessie van QupZilla eindigde met een crash. We verontschuldigen ons. Wilt u proberen om de opgeslagen status te herstellen? @@ -1605,6 +1748,19 @@ werd niet gevonden! Er wordt om een gebruikersnaam en wachtwoord gevraagd door proxy %1. + + OperaImporter + + + No Error + Geen fout + + + + Unable to open file. + + + PageScreen @@ -2438,252 +2594,257 @@ werd niet gevonden! QupZilla - + File Bestand - + Edit Bewerken - + Tools Hulpmiddelen - + Help Help - + View Beeld - - + + Bookmarks Bladwijzers - - + + History Geschiedenis - + Quit Sluit af - + New Tab Nieuw tabblad - + Close Tab Sluit tabblad - + IP Address of current page IP-adres van huidige pagina - + &New Window &Nieuw venster - + Open &File Open &bestand - + &Save Page As... &Sla pagina op als... - + &Print &Afdrukken - + + Import bookmarks... + + + + &Undo &Ongedaan maken - + &Redo &Herhalen - + &Cut &Knippen - + C&opy K&opiëren - + &Paste &Plakken - + &Delete &Verwijderen - + Select &All Selecteer &Alles - + &Find &Zoeken - + &Navigation Toolbar &Navigatiewerkbalk - + &Bookmarks Toolbar &Bladwijzerwerkbalk - + Sta&tus Bar Sta&tusbalk - + Toolbars Werkbalken - + Sidebars Zijpanelen - + &Page Source &Pagina-broncode - + &Menu Bar &Menubalk - + &Fullscreen &Volledig scherm - + &Stop &Stoppen - + &Reload &Herladen - + Character &Encoding &Karakter-tekenset - + Zoom &In Zoo&m in - + Zoom &Out Z&oom uit - + Reset Herstart - + Close Window Sluit venster - + Open Location Open locatie - + Send Link... Verstuur link... - + Other Overig - + Default Standaard - + Current cookies cannot be accessed. Huidige cookies kunnen niet worden benaderd. - + Your session is not stored. Uw sessie is niet bewaard. - + Start Private Browsing Start incognito browsen - + Private Browsing Enabled Incognito browsen ingeschakeld - + Restore &Closed Tab Herstel &gesloten tabblad - + Bookmarks In ToolBar Bookmarks In Toolbar Bladwijzers op werkbalk - - - + + + Empty Leeg @@ -2693,128 +2854,128 @@ werd niet gevonden! Nieuw tabblad - + Bookmark &This Page Bladwijzer &deze pagina - + Bookmark &All Tabs Bladwijzer &alle tabbladen - + Organize &Bookmarks Organiseer &bladwijzers - + &Back &Terug - + &Forward &Vooruit - + &Home &Startpagina - + Show &All History Toon &alle geschiedenis - + Closed Tabs Gesloten tabbladen - + Save Page Screen Sla schermafbeelding op - - + + (Private Browsing) (Incognito browsen) - + Restore All Closed Tabs Herstel alle gesloten tabbladen - + Clear list Wis lijst - + About &Qt Over &Qt - + &About QupZilla &Over QupZilla - + Informations about application Informatie over programma - + Report &Issue Rapporteer &probleem - + &Web Search &Webzoeken - + Page &Info Pagina-&info - + &Download Manager &Downloadbeheerder - + &Cookies Manager &Cookies-beheerder - + &AdBlock &AdBlock - + RSS &Reader &RSS-lezer - + Clear Recent &History Wis recente &geschiedenis - + &Private Browsing &Incognito browsen - + Pr&eferences &Instellingen @@ -2823,32 +2984,32 @@ werd niet gevonden! Web-inspecteur - + Open file... Open bestand... - + Are you sure you want to turn on private browsing? Weet u zeker dat u incognito browsen wilt inschakelen? - + When private browsing is turned on, some actions concerning your privacy will be disabled: Wanneer incognito browsen is ingeschakeld, zullen sommige acties aangaande uw privacy uitgeschakeld worden: - + Webpages are not added to the history. Webpagina's worden niet toegevoegd aan uw geschiedenis. - + Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened. Totdat u dit venster afsluit, kunt nog steeds op de Terug en Vooruit-knoppen klikken om terug naar de webpagina's te gaan die u hebt geopend. - + There are still %1 open tabs and your session won't be stored. Are you sure to quit? U heeft nog steeds %1 geopende tabs en uw sessie zal niet worden opgeslagen. Weet u zeker dat u wilt afsluiten? diff --git a/translations/sk_SK.ts b/translations/sk_SK.ts index 4d04ce542..ae4fcb5ea 100644 --- a/translations/sk_SK.ts +++ b/translations/sk_SK.ts @@ -289,7 +289,7 @@ p, li { white-space: pre-wrap; } Are you sure to delete all passwords on your computer? - Ste si istý, že chcete vymazať všetky heslá na vašom počítači? + Ste si istý, že chcete vymazať všetky heslá vo vašom počítači? @@ -342,6 +342,113 @@ p, li { white-space: pre-wrap; } Upraviť túto záložku + + BookmarksImportDialog + + + Import Bookmarks + Import záložiek + + + + <b>Import Bookmarks</b> + <b>Import záložiek</b> + + + + Choose browser from which you want to import bookmarks: + Vyberte prehliadač, z ktorého chcete importovať záložky: + + + + Choose... + Vybrať... + + + + Fetching icons, please wait... + Získavám ikony, prosím čakajte... + + + + Title + Názov + + + + Url + Url + + + + Next + Ďalší + + + + Cancel + Zrušiť + + + + <b>Importing from %1</b> + <b>Importovať z %1</b> + + + + Finish + Dokončené + + + + + + Error! + Chyba! + + + + Choose directory... + Zvoľte umiestnenie... + + + + Choose file... + Zvoľte súbor... + + + + Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite database. This file is usually located in + Mozilla Firefox ukladá svoje záložky v SQLite databáze <b>places.sqlite</b>. Tento súbor sa obvykle nachádza v + + + + Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. This file is usually located in + Google Chrome ukladá svoje záložky v SQLite databáze <b>places.sqlite</b>. Tento súbor sa obvykle nachádza v + + + + Opera stores its bookmarks in <b>bookmarks.adr</b> text file. This file is usually located in + Opera ukladá svoje záložky v SQLite databáze <b>places.sqlite</b>. Tento súbor sa obvykle nachádza v + + + + Internet Explorer stores its bookmarks in <b>Favorites</b> folder. This folder is usually located in + Internet Explorer ukladá svoje záložky v SQLite databáze <b>places.sqlite</b>. Tento súbor sa obvykle nachádza v + + + + + + Please choose this file to begin importing bookmarks. + Prosím zvoľte tento súbor pre zahájenie importu. + + + + Please choose this folder to begin importing bookmarks. + Prosím zvoľte tento priečinok pre zahájenie importu. + + BookmarksManager @@ -463,22 +570,22 @@ p, li { white-space: pre-wrap; } BookmarksModel - - - + + + Bookmarks In Menu Záložky v menu - - - + + + Bookmarks In ToolBar Panel záložiek - - + + Unsorted Bookmarks Neroztriedené záložky @@ -724,6 +831,24 @@ p, li { white-space: pre-wrap; } <nie je súčasťou certifikátu> + + ChromeImporter + + + No Error + Žiadna chyba + + + + Unable to open file. + Nepodarilo sa otvoriť súbor. + + + + Cannot evaluate JSON code. + Nie je možné spustiť JSON kód. + + ClearPrivateData @@ -1232,32 +1357,50 @@ p, li { white-space: pre-wrap; } Url: - + Url: Shortcut: - + Skratka: Icon: - + Ikona: <b>Note: </b>%s in url represent searched string - + <b>Poznámka: </b>%s v url reprezentuje hľadaný reťazec Add from file ... - + Pridať zo súboru... Choose icon... - + Zvoľte ikonu... + + + + FirefoxImporter + + + No Error + Žiadna chyba + + + + File does not exists. + Súbor neexistuje. + + + + Unable to open database. Is Firefox running? + Nepodarilo sa otvoriť databázu. Je Firefox zapnutý? @@ -1496,12 +1639,12 @@ p, li { white-space: pre-wrap; } MainApplication - + Last session crashed Minulá relácia spadla - + <b>QupZilla crashed :-(</b><br/>Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state? <b>QupZilla spadla :-(</b><br/>Oops, minulá relácia QupZilly skončila pádom. Veľmi sa ospravedlňujeme. Chcete sa pokúsiť obnoviť uložený stav? @@ -1615,6 +1758,19 @@ p, li { white-space: pre-wrap; } Proxy %1 požaduje meno používateľa a heslo. + + OperaImporter + + + No Error + Žiadna chyba + + + + Unable to open file. + Nepodarilo sa otvoriť súbor. + + PageScreen @@ -2405,7 +2561,7 @@ p, li { white-space: pre-wrap; } The file is not an OpenSearch 1.1 file. - + Tento súbor nie je kompatibilný s OpenSearh 1.1. @@ -2444,251 +2600,256 @@ p, li { white-space: pre-wrap; } QupZilla - + File Súbor - + Edit Úpravy - + Tools Nástroje - + Help Nápoveda - + View Zobraziť - - + + Bookmarks Záložky - - + + History História - + Quit Koniec - + New Tab Nová karta - + Close Tab Zatvoriť kartu - + IP Address of current page IP adresa aktuálnej stránky - + &New Window &Nové okno - + Open &File Otvoriť &súbor - + &Save Page As... &Uložiť stránku ako... - + &Print &Tlačiť - + + Import bookmarks... + Importovať záložky... + + + &Undo &Späť - + &Redo &Dopredu - + &Cut &Vystrihnúť - + C&opy &Kopírovať - + &Paste &Prilepiť - + &Delete &Odstrániť - + Select &All Vybrať vš&etko - + &Find &Nájsť - + &Navigation Toolbar Panel &navigácie - + &Bookmarks Toolbar Panel &záložiek - + Sta&tus Bar Stavový &riadok - + Toolbars Panely nástrojov - + Sidebars Bočné panely - + &Page Source Zdrojový &kód stránky - + &Menu Bar &Menu panel - + &Fullscreen &Celá obrazovka - + &Stop Za&staviť - + &Reload &Obnoviť - + Character &Encoding Kódovani&e znakov - + Zoom &In Priblíž&iť - + Zoom &Out &Oddialiť - + Reset Resetovať - + Close Window Zatvoriť okno - + Open Location Otvoriť umiestnenie - + Send Link... Poslať odkaz... - + Other Ostatné - + Default Štandardné - + Current cookies cannot be accessed. Aktuálne cookies nie sú dostupné. - + Your session is not stored. Vaša relácia nie je uložená. - + Start Private Browsing Spustiť súkromné prehliadanie - + Private Browsing Enabled Súkromné prehliadanie je zapnuté - + Restore &Closed Tab Obnoviť zatvorenú &kartu - + Bookmarks In ToolBar Záložky v paneli nástrojov - - - + + + Empty Prázdne @@ -2698,128 +2859,128 @@ p, li { white-space: pre-wrap; } Nová karta - + Bookmark &This Page Pridať túto &stránku do záložiek - + Bookmark &All Tabs Pridať &všetky karty do záložiek - + Organize &Bookmarks &Organizovať záložky - + &Back &Späť - + &Forward &Dopredu - + &Home Do&mov - + Show &All History Zobraziť celú &históriu - + Closed Tabs Zatvorené karty - + Save Page Screen Uložiť obrázok stránky - - + + (Private Browsing) (Súkromné prehliadanie) - + Restore All Closed Tabs Obnoviť všetky zatvorené karty - + Clear list Vyčistiť zoznam - + About &Qt O &Qt - + &About QupZilla &O QupZille - + Informations about application Informácie o programe - + Report &Issue Nahlásiť &problém - + &Web Search Hladať na &webe - + Page &Info &Informácie o stránke - + &Download Manager Správca &sťahovania - + &Cookies Manager Správca &cookies - + &AdBlock &AdBlock - + RSS &Reader &RSS čítačka - + Clear Recent &History Vymazať nedávnu &históriu - + &Private Browsing Súkromné prehlia&danie - + Pr&eferences Nastav&enia @@ -2828,32 +2989,32 @@ p, li { white-space: pre-wrap; } Web inšpektor - + Open file... Otvoriť súbor... - + Are you sure you want to turn on private browsing? Ste si istý, že chcete zapnúť súkromné prehliadanie? - + When private browsing is turned on, some actions concerning your privacy will be disabled: Keď je zapnuté súkromné prehliadanie, niektoré akcie týkajúce sa vášho súkromia sú vypnuté: - + Webpages are not added to the history. Stránky nie sú pridávané do histórie. - + Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened. Kým nezatvoríte okno, stále môžte používať tlačidlá Späť a Dopredu k vráteniu sa na stránky, ktoré ste mali otvorené. - + There are still %1 open tabs and your session won't be stored. Are you sure to quit? Stále sú otvorené %1 karty a vaša relácia nebude uložená. Ste si istý, že chcete skončiť? @@ -3290,7 +3451,7 @@ Po pridaní či odobratí ciest k certifikátom je nutné reštartovať prehliad Manage Search Engines - + Spravovať vyhľadávače @@ -3300,37 +3461,37 @@ Po pridaní či odobratí ciest k certifikátom je nutné reštartovať prehliad Remove - + Odstrániť Edit - + Upraviť Defaults - + Pôvodné Search Engine - + Vyhľadávač Shortcut - + Zástupca Add Search Engine - + Pridať vyhľadávač Edit Search Engine - + Upraviť vyhľadávač @@ -3338,17 +3499,17 @@ Po pridaní či odobratí ciest k certifikátom je nutné reštartovať prehliad Search Engine Added - + Pridaný vyhľadávač Search Engine "%1" has been successfuly added. - + Vyhľadávač "%1" bol úspešne pridaný. Search Engine is not valid! - + Vyhľadávač nie je platný! @@ -3358,7 +3519,7 @@ Po pridaní či odobratí ciest k certifikátom je nutné reštartovať prehliad Error while adding Search Engine <br><b>Error Message: </b> %1 - + Chyba pri pridávaní vyhľadávača <br><b>Chybová správa: </b> %1 @@ -4028,12 +4189,12 @@ Po pridaní či odobratí ciest k certifikátom je nutné reštartovať prehliad Manage Search Engines - + Spravovať vyhľadávače Add %1 ... - + Pridať %1 ...