diff --git a/libsearch/file-utils.cpp b/libsearch/file-utils.cpp index ecb5e6e..e4e95a7 100644 --- a/libsearch/file-utils.cpp +++ b/libsearch/file-utils.cpp @@ -837,3 +837,60 @@ QString FileUtils::chineseSubString(const std::string &myStr, int start, int len } return sub; } + +QString FileUtils::getHtmlText(const QString &text, const QString &keyword) +{ + QString htmlString; + bool boldOpenned = false; + for(int i = 0; i < text.length(); i++) { + if((keyword.toUpper()).contains(QString(text.at(i)).toUpper())) { + if(! boldOpenned) { + boldOpenned = true; + htmlString.append(QString("")); + } + htmlString.append(FileUtils::escapeHtml(QString(text.at(i)))); + } else { + if(boldOpenned) { + boldOpenned = false; + htmlString.append(QString("")); + } + htmlString.append(FileUtils::escapeHtml(QString(text.at(i)))); + } + } + htmlString.replace("\n", "
");//替换换行符 + return htmlString; +} + +QString FileUtils::wrapData(QLabel *p_label, const QString &text) +{ + QString wrapText = text; + + QFontMetrics fontMetrics = p_label->fontMetrics(); + int textSize = fontMetrics.width(wrapText); + + if(textSize > LABEL_MAX_WIDTH){ + int lastIndex = 0; + int count = 0; + + for(int i = lastIndex; i < wrapText.length(); i++) { + + if(fontMetrics.width(wrapText.mid(lastIndex, i - lastIndex)) == LABEL_MAX_WIDTH) { + lastIndex = i; + wrapText.insert(i, '\n'); + count++; + } else if(fontMetrics.width(wrapText.mid(lastIndex, i - lastIndex)) > LABEL_MAX_WIDTH) { + lastIndex = i; + wrapText.insert(i - 1, '\n'); + count++; + } else { + continue; + } + + if(count == 2){ + break; + } + } + } +// p_label->setText(wrapText); + return wrapText; +} diff --git a/libsearch/file-utils.h b/libsearch/file-utils.h index 856acd2..0b3bd69 100644 --- a/libsearch/file-utils.h +++ b/libsearch/file-utils.h @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,8 @@ namespace Zeeker { class LIBSEARCH_EXPORT FileUtils { public: + static QString getHtmlText(const QString & text, const QString & keyword); + static QString wrapData(QLabel *p_label, const QString &text); static std::string makeDocUterm(QString); static QIcon getFileIcon(const QString &, bool checkValid = true); static QIcon getAppIcon(const QString &); diff --git a/libsearch/libsearch.h b/libsearch/libsearch.h index 5c0bfa7..7ef4074 100644 --- a/libsearch/libsearch.h +++ b/libsearch/libsearch.h @@ -22,7 +22,6 @@ #include "libsearch_global.h" #include "appsearch/app-match.h" -#include "settingsearch/setting-match.h" #include "file-utils.h" #include "global-settings.h" diff --git a/libsearch/libsearch.pro b/libsearch/libsearch.pro index d8b8ac9..f655cc4 100644 --- a/libsearch/libsearch.pro +++ b/libsearch/libsearch.pro @@ -27,11 +27,10 @@ DEFINES += PLUGIN_INSTALL_DIRS='\\"$${PLUGIN_INSTALL_DIRS}\\"' include(pluginmanage/plugin-manager.pri) include(plugininterface/plugin-interface.pri) include(index/index.pri) -include(parser/parser.pri)) +include(parser/parser.pri) include(appsearch/appsearch.pri) -include(settingsearch/settingsearch.pri)) - - +include(notesearch/notesearch.pri) +include(settingsearch/settingsearch.pri) LIBS += -L$$OUT_PWD/../libchinese-segmentation/ -lchinese-segmentation LIBS += -lxapian -lquazip5 -luchardet #-L/usr/local/lib/libjemalloc -ljemalloc diff --git a/libsearch/notesearch/note-search-plugin.cpp b/libsearch/notesearch/note-search-plugin.cpp new file mode 100644 index 0000000..c3deb62 --- /dev/null +++ b/libsearch/notesearch/note-search-plugin.cpp @@ -0,0 +1,206 @@ +#include "note-search-plugin.h" +#include +#include +#include "file-utils.h" +#include "chinese-segmentation.h" +using namespace Zeeker; + +NoteSearchPlugin::NoteSearchPlugin(QObject *parent) +{ + g_uniqueSymbol = 0; + SearchPluginIface::Actioninfo open { 0, tr("Open")}; + m_actionInfo << open; + m_pool.setMaxThreadCount(1); + m_pool.setExpiryTimeout(1000); + initDetailPage(); +} + +const QString NoteSearchPlugin::name() +{ + return tr("Note Search"); +} + +const QString NoteSearchPlugin::description() +{ + return tr("Note Search."); +} + +QString NoteSearchPlugin::getPluginName() +{ + return tr("Note Search"); +} + +void NoteSearchPlugin::KeywordSearch(QString keyword, DataQueue *searchResult) +{ + g_mutex.lock(); + ++g_uniqueSymbol; + g_mutex.unlock(); + m_keyword = keyword; + NoteSearch *ns = new NoteSearch(searchResult, keyword, g_uniqueSymbol); + m_pool.start(ns); +} + +QList NoteSearchPlugin::getActioninfo(int type) +{ + return m_actionInfo; +} + +void NoteSearchPlugin::openAction(int actionkey, QString key, int type) +{ + QProcess process; + switch (actionkey) { + case 0: + process.startDetached(QString("ukui-notebook --show %1").arg(key.toInt())); + break; + default: + break; + } +} + +QWidget *NoteSearchPlugin::detailPage(const SearchPluginIface::ResultInfo &ri) +{ + m_currentActionKey = ri.actionKey; + m_iconLabel->setPixmap(ri.icon.pixmap(120, 120)); + QFontMetrics fontMetrics = m_nameLabel->fontMetrics(); + QString showname = fontMetrics.elidedText(ri.name, Qt::ElideRight, 215); //当字体长度超过215时显示为省略号 + m_nameLabel->setText(QString("

%1

").arg(FileUtils::escapeHtml(showname))); + if(QString::compare(showname, ri.name)) { + m_nameLabel->setToolTip(ri.name); + } + m_pluginLabel->setText(tr("Application")); + QString showDesc = fontMetrics.elidedText(/*ri.description.at(0).key + " " + */ri.description.at(0).value, Qt::ElideRight, m_descLabel->width() * 2); //当字体长度超过215时显示为省略号 + m_descLabel->setText(FileUtils::getHtmlText(FileUtils::wrapData(m_descLabel, showDesc), m_keyword)); + m_descFrame->show(); + m_line_2->show(); + return m_detailPage; +} + +void NoteSearchPlugin::initDetailPage() +{ + m_detailPage = new QWidget(); + m_detailPage->setFixedWidth(360); + m_detailPage->setAttribute(Qt::WA_TranslucentBackground); + m_detailLyt = new QVBoxLayout(m_detailPage); + m_detailLyt->setContentsMargins(8, 0, 16, 0); + m_iconLabel = new QLabel(m_detailPage); + m_iconLabel->setAlignment(Qt::AlignCenter); + m_iconLabel->setFixedHeight(128); + + m_nameFrame = new QFrame(m_detailPage); + m_nameFrameLyt = new QHBoxLayout(m_nameFrame); + m_nameFrame->setLayout(m_nameFrameLyt); + m_nameFrameLyt->setContentsMargins(8, 0, 0, 0); + m_nameLabel = new QLabel(m_nameFrame); + m_nameLabel->setMaximumWidth(280); + m_pluginLabel = new QLabel(m_nameFrame); + m_pluginLabel->setText(tr("Note Search")); + m_pluginLabel->setEnabled(false); + m_nameFrameLyt->addWidget(m_nameLabel); + m_nameFrameLyt->addStretch(); + m_nameFrameLyt->addWidget(m_pluginLabel); + + m_line_1 = new QFrame(m_detailPage); + m_line_1->setLineWidth(0); + m_line_1->setFixedHeight(1); + m_line_1->setStyleSheet("QFrame{background: rgba(0,0,0,0.2);}"); + m_descFrame = new QFrame(m_detailPage); + m_descFrameLyt = new QVBoxLayout(m_descFrame); + m_descLabel = new QLabel(m_descFrame); + m_descLabel->setTextFormat(Qt::AutoText); + m_descLabel->setWordWrap(true); + m_descFrameLyt->addWidget(m_descLabel); + m_descFrame->setLayout(m_descFrameLyt); + m_descFrameLyt->setContentsMargins(8, 0, 0, 0); + m_line_2 = new QFrame(m_detailPage); + m_line_2->setLineWidth(0); + m_line_2->setFixedHeight(1); + m_line_2->setStyleSheet("QFrame{background: rgba(0,0,0,0.2);}"); + + m_line_1 = new QFrame(m_detailPage); + m_line_1->setLineWidth(0); + m_line_1->setFixedHeight(1); + m_line_1->setStyleSheet("QFrame{background: rgba(0,0,0,0.2);}"); + + m_actionFrame = new QFrame(m_detailPage); + m_actionFrameLyt = new QVBoxLayout(m_actionFrame); + m_actionFrameLyt->setContentsMargins(8, 0, 0, 0); + m_actionLabel1 = new ActionLabel(tr("Open"), m_currentActionKey, m_actionFrame); + + m_actionFrameLyt->addWidget(m_actionLabel1);; + m_actionFrame->setLayout(m_actionFrameLyt); + + m_detailLyt->addSpacing(50); + m_detailLyt->addWidget(m_iconLabel); + m_detailLyt->addWidget(m_nameFrame); + m_detailLyt->addWidget(m_line_1); + m_detailLyt->addWidget(m_descFrame); + m_detailLyt->addWidget(m_line_2); + m_detailLyt->addWidget(m_actionFrame); + m_detailPage->setLayout(m_detailLyt); + m_detailLyt->addStretch(); + + connect(m_actionLabel1, &ActionLabel::actionTriggered, [ & ](){ + openAction(0, m_currentActionKey, 0); + }); +} + + +NoteSearch::NoteSearch(DataQueue *searchResult, const QString &keyword, size_t uniqueSymbol) { + this->setAutoDelete(true); + this->m_searchResult = searchResult; + this->m_keyword = keyword; + this->m_uniqueSymbol = uniqueSymbol; +} + +void NoteSearch::run() { + QVector sKeyWordVec = ChineseSegmentation::getInstance()->callSegement(m_keyword.toStdString()); + QStringList keywordList; + for (SKeyWord sKeyWord : sKeyWordVec) { + keywordList.append(QString::fromStdString(sKeyWord.word)); + } + QDBusInterface qi("org.ukui.note", "/org/ukui/note", "org.ukui.note.interface", QDBusConnection::sessionBus()); + QDBusReply reply = qi.call("keywordMatch", keywordList); + + if(reply.isValid()) { + if (m_uniqueSymbol ^ g_uniqueSymbol) { + qDebug() << m_uniqueSymbol << g_uniqueSymbol; + return; + } else { + qDebug() << m_uniqueSymbol << g_uniqueSymbol; + + for (std::pair it : reply.value().toStdMap()) { + qDebug() << it.first; + qDebug() << it.second; + qDebug() << it.second.value().currentType(); + QDBusArgument dbusArgs = it.second.value(); + QStringList str; + dbusArgs.beginArray(); + while (!dbusArgs.atEnd()) { + QVariant tmp; + dbusArgs >> tmp; + str.append(tmp.toString()); + } + dbusArgs.endArray(); + qDebug() << str; + SearchPluginIface::ResultInfo ri = { + icon : QIcon::fromTheme("kylin-notebook"), + name : str.at(1), + description : QVector() << SearchPluginIface::DescriptionInfo { + key : QString(tr("Note Description:")), + value : str.at(0) + }, + actionKey : it.first + }; + if (m_uniqueSymbol ^ g_uniqueSymbol) { + qDebug() << m_uniqueSymbol << g_uniqueSymbol; + return; + } else { + m_searchResult->enqueue(ri); + } + } + } + } else { + qWarning() << "Note dbus called failed!" << qi.lastError(); + } +} + diff --git a/libsearch/notesearch/note-search-plugin.h b/libsearch/notesearch/note-search-plugin.h new file mode 100644 index 0000000..addbc1b --- /dev/null +++ b/libsearch/notesearch/note-search-plugin.h @@ -0,0 +1,88 @@ +#ifndef NOTESEARCHPLUGIN_H +#define NOTESEARCHPLUGIN_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "search-plugin-iface.h" +#include "action-label.h" +#include "libsearch_global.h" +namespace Zeeker { + +static size_t g_uniqueSymbol; +static QMutex g_mutex; + +class NoteSearch; + +class LIBSEARCH_EXPORT NoteSearchPlugin : public QObject, public SearchPluginIface +{ + Q_OBJECT + friend class NoteSearch; +public: + NoteSearchPlugin(QObject *parent = nullptr); + PluginType pluginType() {return PluginType::SearchPlugin;} + const QString name(); + const QString description(); + const QIcon icon() {return QIcon::fromTheme("folder");} + void setEnable(bool enable) {m_enable = enable;} + bool isEnable() {return m_enable;} + QString getPluginName(); + + void KeywordSearch(QString keyword,DataQueue *searchResult); + QList getActioninfo(int type); + void openAction(int actionkey, QString key, int type); +// bool isPreviewEnable(QString key, int type); +// QWidget *previewPage(QString key, int type, QWidget *parent); + QWidget *detailPage(const ResultInfo &ri); + +private: + QDBusInterface *m_interFace = nullptr; + void initDetailPage(); + QString m_currentActionKey; + QWidget *m_detailPage = nullptr; + QVBoxLayout *m_detailLyt = nullptr; + QLabel *m_iconLabel = nullptr; + QFrame *m_nameFrame = nullptr; + QHBoxLayout *m_nameFrameLyt = nullptr; + QLabel *m_nameLabel = nullptr; + QLabel *m_pluginLabel = nullptr; + QFrame *m_line_1 = nullptr; + QFrame *m_descFrame = nullptr; + QLabel *m_descLabel = nullptr; + QVBoxLayout *m_descFrameLyt = nullptr; + QFrame *m_line_2 = nullptr; + QFrame *m_actionFrame = nullptr; + QVBoxLayout *m_actionFrameLyt = nullptr; + ActionLabel *m_actionLabel1 = nullptr; + QVBoxLayout * m_actionLyt = nullptr; + + bool m_enable = true; + QString m_keyword; + QList m_actionInfo; + QThreadPool m_pool; +}; + +class NoteSearch : public QObject, public QRunnable { + Q_OBJECT +public: + NoteSearch(DataQueue *searchResult, const QString& keyword, size_t uniqueSymbol); + ~NoteSearch() = default; +protected: + void run() override; +private: + QString m_keyword; + DataQueue *m_searchResult = nullptr; + size_t m_uniqueSymbol; +}; +} + +#endif // NOTESEARCHPLUGIN_H diff --git a/libsearch/notesearch/notesearch.pri b/libsearch/notesearch/notesearch.pri new file mode 100644 index 0000000..62dc971 --- /dev/null +++ b/libsearch/notesearch/notesearch.pri @@ -0,0 +1,7 @@ +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/note-search-plugin.h + +SOURCES += \ + $$PWD/note-search-plugin.cpp diff --git a/libsearch/pluginmanage/search-plugin-manager.cpp b/libsearch/pluginmanage/search-plugin-manager.cpp index 6251530..0d10bef 100644 --- a/libsearch/pluginmanage/search-plugin-manager.cpp +++ b/libsearch/pluginmanage/search-plugin-manager.cpp @@ -1,8 +1,9 @@ #include #include "search-plugin-manager.h" #include "file-search-plugin.h" -#include "app-search-plugin.h"- +#include "app-search-plugin.h" #include "settings-search-plugin.h" +#include "note-search-plugin.h" using namespace Zeeker; @@ -10,6 +11,7 @@ static SearchPluginManager *global_instance = nullptr; SearchPluginManager::SearchPluginManager(QObject *parent) { registerPlugin(new AppSearchPlugin(this)); + registerPlugin(new NoteSearchPlugin(this)); registerPlugin(new SettingsSearchPlugin(this)); registerPlugin(new DirSearchPlugin(this)); registerPlugin(new FileSearchPlugin(this)); diff --git a/libsearch/settingsearch/setting-match.cpp b/libsearch/settingsearch/setting-match.cpp deleted file mode 100644 index 69b86fd..0000000 --- a/libsearch/settingsearch/setting-match.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2020, KylinSoft Co., Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * Authors: sunfengsheng - * - */ -#include "setting-match.h" -#include "file-utils.h" -#include -using namespace Zeeker; -SettingsMatch::SettingsMatch(QObject *parent) : QObject(parent) { - xmlElement(); -} - -/** - * @brief SettingsMatch::startMatchApp - * 返回给页面 - * @param source - * 获取的字符串 - * @return - */ -QStringList SettingsMatch::startMatchApp(const QString &source) { - m_sourceText = source; - QStringList settingList = matching(); - return settingList; -} - -/** - * @brief SettingsMatch::xmlElement - * 将xml文件内容读到内存 - */ -void SettingsMatch::xmlElement() { - QString ChineseIndex; - QString EnglishIndex; - QString path = QProcessEnvironment::systemEnvironment().value("XDG_SESSION_TYPE"); - QString version; - QFile file(QString::fromLocal8Bit("/usr/share/ukui-control-center/shell/res/search.xml")); - if(!file.open(QIODevice::ReadOnly)) { - return; - } - QDomDocument doc; - doc.setContent(&file); - QDomElement root = doc.documentElement(); - QDomNode node = root.previousSibling(); - node = root.firstChild(); - - while(!node.isNull()) { - QDomElement element = node.toElement(); - QString key = element.attribute("name"); - m_chine_searchResult = m_chine_searchList.value(key); - m_English_searchResult = m_English_searchList.value(key); - QDomNodeList list = element.childNodes(); - for(int i = 0; i < list.count(); ++i) { - QDomNode n = list.at(i); - if(n.nodeName()==QString::fromLocal8Bit("Environment")){ - version=n.toElement().text(); - if((version=="v101"&&path=="wayland")||(version=="hw990"&&path=="x11")){ - break; - } - } - if(n.nodeName() == QString::fromLocal8Bit("ChinesePlugin")) { - ChineseIndex = n.toElement().text(); - } - if(n.nodeName() == QString::fromLocal8Bit("ChineseFunc")) { - ChineseIndex += QString::fromLocal8Bit("/") + n.toElement().text(); - m_chine_searchResult.append(ChineseIndex); - } - if(n.nodeName() == QString::fromLocal8Bit("EnglishFunc")) { - EnglishIndex = QString::fromLocal8Bit("/") + n.toElement().text(); - m_English_searchResult.append(EnglishIndex); - } - } - m_chine_searchList.insert(key, m_chine_searchResult); - m_English_searchList.insert(key, m_English_searchResult); - node = node.nextSibling(); - } - file.close(); -} - -/** - * @brief SettingsMatch::matching - * 进行关键字匹配 - * @return - */ -QStringList SettingsMatch::matching() { - QStringList returnresult; - QStringList regmatch; - QString key; - QStringList pinyinlist; - QMap::const_iterator i; - QLocale ql; - if(ql.language() == QLocale::Chinese) { - for(i = m_chine_searchList.constBegin(); i != m_chine_searchList.constEnd(); ++i) { - regmatch = *i; - key = i.key(); - for(int t = 0; t < regmatch.size(); t++) { - if(m_sourceText == "/") - continue; - QString str = regmatch.at(t); - pinyinlist = FileUtils::findMultiToneWords(str); - if(str.contains(m_sourceText)) { - str = key + "/" + str; - returnresult.append(str);//中文名 - continue; - } - for(int i = 0; i < pinyinlist.size() / 2; i++) { - str = regmatch.at(t); - QString shouzimu = pinyinlist.at(2 * i + 1); // 中文转首字母 - if(shouzimu.contains(m_sourceText, Qt::CaseInsensitive)) { - str = key + "/" + str; - returnresult.append(str); - break; - } - if(m_sourceText.size() < 2) - break; - QString pinyin = pinyinlist.at(2 * i); // 中文转拼音 - if(pinyin.contains(m_sourceText, Qt::CaseInsensitive)) { - str = key + "/" + str; - returnresult.append(str); - break; - } - } - - } - } - } - if(ql.language() == QLocale::English) { - for(i = m_English_searchList.constBegin(); i != m_English_searchList.constEnd(); ++i) { - regmatch = *i; - key = i.key(); - for(int t = 0; t < regmatch.size(); t++) { - if(m_sourceText == "/") - continue; - QString str = regmatch.at(t); - if(str.contains(m_sourceText, Qt::CaseInsensitive)) { - str = key + "/" + str; - returnresult.append(str); - } - } - } - } - return returnresult; -} diff --git a/libsearch/settingsearch/setting-match.h b/libsearch/settingsearch/setting-match.h deleted file mode 100644 index 5cbe62f..0000000 --- a/libsearch/settingsearch/setting-match.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2020, KylinSoft Co., Ltd. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * Authors: sunfengsheng - * - */ -#ifndef SETTINGSEARCH_H -#define SETTINGSEARCH_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -namespace Zeeker { -class SettingsMatch : public QObject { - Q_OBJECT -public: - explicit SettingsMatch(QObject *parent = nullptr); - QStringList startMatchApp(const QString &source); - -private: - void xmlElement(); - QStringList matching(); - -private: - QMap m_chine_searchList; - QMap m_English_searchList; - QStringList m_chine_searchResult; - QStringList m_English_searchResult; - QString m_sourceText; - -}; -} - -#endif // SETTINGSEARCH_H diff --git a/libsearch/settingsearch/settingsearch.pri b/libsearch/settingsearch/settingsearch.pri index 2ca2624..fd5ff3b 100644 --- a/libsearch/settingsearch/settingsearch.pri +++ b/libsearch/settingsearch/settingsearch.pri @@ -1,9 +1,7 @@ INCLUDEPATH += $$PWD HEADERS += \ - $$PWD/setting-match.h \ $$PWD/settings-search-plugin.h SOURCES += \ - $$PWD/setting-match.cpp \ $$PWD/settings-search-plugin.cpp diff --git a/translations/libukui-search/libukui-search_zh_CN.ts b/translations/libukui-search/libukui-search_zh_CN.ts index c018ca7..c6678c8 100644 --- a/translations/libukui-search/libukui-search_zh_CN.ts +++ b/translations/libukui-search/libukui-search_zh_CN.ts @@ -2,13 +2,20 @@ - Zeeker::AppSearch + Zeeker::AppMatch - + Application Description: 应用描述: + + Zeeker::AppSearch + + Application Description: + 应用描述: + + Zeeker::AppSearchPlugin @@ -107,13 +114,13 @@ Zeeker::FileContengSearchPlugin - + Open 打开 - + Open path 打开文件所在路径 @@ -143,17 +150,17 @@ 文件 - + Path 路径 - + Last time modified 上次修改时间 - + Copy path 复制路径 @@ -209,6 +216,45 @@ 复制路径 + + Zeeker::NoteSearch + + + Note Description: + 便签内容: + 便签内容: + + + + Zeeker::NoteSearchPlugin + + + + Open + 打开 + 打开 + + + + + + Note Search + 便签 + 便签 + + + + Note Search. + 便签. + 便签. + + + + Application + 应用 + 应用 + + Zeeker::SearchManager @@ -226,7 +272,7 @@ Zeeker::SettingsSearchPlugin - + Open 打开 @@ -242,7 +288,7 @@ 设置。 - + Settings 设置项 diff --git a/translations/ukui-search/bo.ts b/translations/ukui-search/bo.ts index 6aacb22..49dd06a 100644 --- a/translations/ukui-search/bo.ts +++ b/translations/ukui-search/bo.ts @@ -4,7 +4,7 @@ QObject - + ukui-search is already running! @@ -12,7 +12,7 @@ Zeeker::BestListWidget - + Best Matches @@ -79,16 +79,24 @@ Zeeker::MainWindow - + ukui-search - + Global Search + + Zeeker::ResultArea + + + Web Page + + + Zeeker::SearchLineEdit @@ -258,19 +266,4 @@ - - Zeeker::ShowMoreLabel - - - - - Show More... - - - - - Retract - - - diff --git a/translations/ukui-search/tr.ts b/translations/ukui-search/tr.ts index a37f8ab..9fedb92 100644 --- a/translations/ukui-search/tr.ts +++ b/translations/ukui-search/tr.ts @@ -99,7 +99,7 @@ QObject - + ukui-search is already running! ukui-bul zaten çalışıyor! @@ -247,7 +247,7 @@ Zeeker::BestListWidget - + Best Matches En İyi Eşleşen @@ -357,12 +357,12 @@ Zeeker::MainWindow - + ukui-search - + Global Search Genel Arama @@ -394,6 +394,14 @@ Yolu kopyala + + Zeeker::ResultArea + + + Web Page + + + Zeeker::SearchBarHLayout @@ -592,16 +600,12 @@ Zeeker::ShowMoreLabel - - - Show More... - Daha Fazla Göster... + Daha Fazla Göster... - Retract - Geri çek + Geri çek Loading diff --git a/translations/ukui-search/zh_CN.ts b/translations/ukui-search/zh_CN.ts index 013eb08..a4e74af 100644 --- a/translations/ukui-search/zh_CN.ts +++ b/translations/ukui-search/zh_CN.ts @@ -4,7 +4,7 @@ QObject - + ukui-search is already running! @@ -12,7 +12,7 @@ Zeeker::BestListWidget - + Best Matches 最佳匹配 @@ -126,12 +126,12 @@ Zeeker::MainWindow - + ukui-search 搜索 - + Global Search 搜索 @@ -167,6 +167,14 @@ 安装 + + Zeeker::ResultArea + + + Web Page + + + Zeeker::SearchBarHLayout @@ -373,16 +381,12 @@ Zeeker::ShowMoreLabel - - - Show More... - 显示更多... + 显示更多... - Retract - 收起 + 收起 Loading