diff options
Diffstat (limited to 'src/search')
| -rw-r--r-- | src/search/dolphinsearchbox.cpp | 318 | ||||
| -rw-r--r-- | src/search/dolphinsearchbox.h | 96 | ||||
| -rw-r--r-- | src/search/dolphinsearchcommands.desktop | 276 |
3 files changed, 690 insertions, 0 deletions
diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp new file mode 100644 index 000000000..d224575ea --- /dev/null +++ b/src/search/dolphinsearchbox.cpp @@ -0,0 +1,318 @@ +/*************************************************************************** + * Copyright (C) 2009 by Peter Penz <[email protected]> * + * Copyright (C) 2009 by Matthias Fuchs <[email protected]> * + * * + * 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 2 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, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ +#include "dolphinsearchbox.h" + +#include <config-nepomuk.h> + +#include <KConfigGroup> +#include <KDesktopFile> +#include <kglobalsettings.h> +#include <klineedit.h> +#include <klocale.h> +#include <kiconloader.h> +#include <KStandardDirs> + +#include <QEvent> +#include <QKeyEvent> +#include <QHBoxLayout> +#include <QStandardItemModel> +#include <QtGui/QCompleter> +#include <QtGui/QTreeView> +#include <QToolButton> + +#ifdef HAVE_NEPOMUK +#include <Nepomuk/ResourceManager> +#include <Nepomuk/Tag> +#endif + +DolphinSearchCompleter::DolphinSearchCompleter(KLineEdit* linedit) : + QObject(0), + q(linedit), + m_completer(0), + m_completionModel(0), + m_wordStart(-1), + m_wordEnd(-1) +{ + m_completionModel = new QStandardItemModel(this); + +#ifdef HAVE_NEPOMUK + if (!Nepomuk::ResourceManager::instance()->init()) { + //read all currently set tags + //NOTE if the user changes tags elsewhere they won't get updated here + QList<Nepomuk::Tag> tags = Nepomuk::Tag::allTags(); + foreach (const Nepomuk::Tag& tag, tags) { + const QString tagText = tag.label(); + addCompletionItem(tagText, + "tag:\"" + tagText + '\"', + i18nc("Tag as in Nepomuk::Tag", "Tag"), + QString(), + KIcon("mail-tagged")); + } + } +#endif //HAVE_NEPOMUK + + // load the completions stored in the desktop file + KDesktopFile file(KStandardDirs::locate("data", "dolphin/dolphinsearchcommands.desktop")); + foreach (const QString &group, file.groupList()) { + KConfigGroup cg(&file, group); + const QString displayed = cg.readEntry("Name", QString()); + const QString usedForCompletition = cg.readEntry("Completion", QString()); + const QString description = cg.readEntry("Comment", QString()); + const QString toolTip = cg.readEntry("GenericName", QString()); + const QString icon = cg.readEntry("Icon", QString()); + + if (icon.isEmpty()) { + addCompletionItem(displayed, usedForCompletition, description, toolTip); + } else { + addCompletionItem(displayed, usedForCompletition, description, toolTip, KIcon(icon)); + } + } + + m_completionModel->sort(0, Qt::AscendingOrder); + + m_completer = new QCompleter(m_completionModel, this); + m_completer->setWidget(q); + m_completer->setCaseSensitivity(Qt::CaseInsensitive); + QTreeView *view = new QTreeView; + m_completer->setPopup(view); + view->setRootIsDecorated(false); + view->setHeaderHidden(true); + + connect(q, SIGNAL(textEdited(QString)), this, SLOT(slotTextEdited(QString))); + connect(m_completer, SIGNAL(activated(QModelIndex)), this, SLOT(completionActivated(QModelIndex))); + connect(m_completer, SIGNAL(highlighted(QModelIndex)), this, SLOT(highlighted(QModelIndex))); +} + +void DolphinSearchCompleter::addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description, const QString& toolTip, const KIcon& icon) +{ + if (displayed.isEmpty() || usedForCompletition.isEmpty()) { + return; + } + + QList<QStandardItem*> items; + QStandardItem *item = new QStandardItem(); + item->setData(QVariant(displayed), Qt::DisplayRole); + item->setData(QVariant(usedForCompletition), Qt::UserRole); + item->setData(QVariant(toolTip), Qt::ToolTipRole); + items << item; + + item = new QStandardItem(description); + if (!icon.isNull()) { + item->setIcon(icon); + } + item->setData(QVariant(toolTip), Qt::ToolTipRole); + items << item; + + m_completionModel->insertRow(m_completionModel->rowCount(), items); +} + +void DolphinSearchCompleter::findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input) +{ + --cursorPos;//decrease to get a useful position (not the end of the word e.g.) + + if (!wordStart || !wordEnd) { + return; + } + + *wordStart = -1; + *wordEnd = -1; + + // the word might contain "" and thus maybe spaces + if (input.contains('\"')) { + int tempStart = -1; + int tempEnd = -1; + + do { + tempStart = input.indexOf('\"', tempEnd + 1); + tempEnd = input.indexOf('\"', tempStart + 1); + if ((cursorPos >= tempStart) && (cursorPos <= tempEnd)) { + *wordStart = tempStart; + *wordEnd = tempEnd; + break; + } else if ((tempEnd == -1) && (cursorPos >= tempStart)) { + //one " found, so probably the beginning of the new word + *wordStart = tempStart; + break; + } + } while ((tempStart != -1) && (tempEnd != -1)); + } + + if (*wordEnd > -1) { + *wordEnd = input.indexOf(' ', *wordEnd) - 1; + } else { + *wordEnd = input.indexOf(' ', cursorPos) - 1; + } + if (*wordEnd < 0) { + *wordEnd = input.length() - 1; + } + + if (*wordStart > -1) { + *wordStart = input.lastIndexOf(' ', *wordStart + 1) + 1; + } else { + *wordStart = input.lastIndexOf(' ', cursorPos) + 1; + } + if (*wordStart < 0) { + *wordStart = 0; + } + + + QString word = input.mid(*wordStart, *wordEnd - *wordStart + 1); + + //remove opening braces or negations ('-' = not) at the beginning + while (word.count() && ((word[0] == '(') || (word[0] == '-'))) { + word.remove(0, 1); + ++(*wordStart); + } + + //remove ending braces at the end + while (word.count() && (word[word.count() - 1] == ')')) { + word.remove(word.count() - 1, 1); + --(*wordEnd); + } + + if (newWord) { + *newWord = word; + } +} + +void DolphinSearchCompleter::slotTextEdited(const QString& text) +{ + findText(&m_wordStart, &m_wordEnd, &m_userText, q->cursorPosition(), text); + + if (!m_userText.isEmpty()) { + const int role = m_completer->completionRole(); + + //change the role used for comparison depending on what the user entered + if (m_userText.contains(':') || m_userText.contains('\"')) { + //assume that m_userText contains searchinformation like 'tag:"..."' + if (role != Qt::UserRole) { + m_completer->setCompletionRole(Qt::UserRole); + } + } else if (role != Qt::EditRole) { + m_completer->setCompletionRole(Qt::EditRole); + } + + m_completer->setCompletionPrefix(m_userText); + m_completer->complete(); + } +} + +void DolphinSearchCompleter::highlighted(const QModelIndex& index) +{ + QString text = q->text(); + int wordStart; + int wordEnd; + + findText(&wordStart, &wordEnd, 0, q->cursorPosition(), text); + + QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); + //show the originally entered text + if (replace.isEmpty()) { + replace = m_userText; + } + + text.replace(wordStart, wordEnd - wordStart + 1, replace); + q->setText(text); + q->setCursorPosition(wordStart + replace.length()); +} + +void DolphinSearchCompleter::activated(const QModelIndex& index) +{ + if ((m_wordStart == -1) || (m_wordStart == -1)) { + return; + } + + const QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); + QString newText = q->text(); + newText.replace(m_wordStart, m_wordEnd - m_wordStart + 1, replace); + q->setText(newText); +} + +DolphinSearchBox::DolphinSearchBox(QWidget* parent) : + QWidget(parent), + m_searchInput(0), + m_searchButton(0), + m_completer(0) +{ + QHBoxLayout* hLayout = new QHBoxLayout(this); + hLayout->setMargin(0); + hLayout->setSpacing(0); + + m_searchInput = new KLineEdit(this); + m_searchInput->setClearButtonShown(true); + m_searchInput->setMinimumWidth(150); + m_searchInput->setClickMessage(i18nc("@label:textbox", "Search...")); + m_searchInput->installEventFilter(this); + hLayout->addWidget(m_searchInput); + connect(m_searchInput, SIGNAL(textEdited(const QString&)), + this, SLOT(slotTextEdited(const QString&))); + connect(m_searchInput, SIGNAL(returnPressed()), + this, SLOT(emitSearchSignal())); + + m_searchButton = new QToolButton(this); + m_searchButton->setAutoRaise(true); + m_searchButton->setIcon(KIcon("edit-find")); + m_searchButton->setToolTip(i18nc("@info:tooltip", "Click to begin the search")); + hLayout->addWidget(m_searchButton); + connect(m_searchButton, SIGNAL(clicked()), + this, SLOT(emitSearchSignal())); +} + +DolphinSearchBox::~DolphinSearchBox() +{ +} + +bool DolphinSearchBox::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + m_searchInput->setFont(KGlobalSettings::generalFont()); + } else if (event->type() == QEvent::KeyPress) { + if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Escape) { + m_searchInput->clear(); + } + } + return QWidget::event(event); +} + +bool DolphinSearchBox::eventFilter(QObject* watched, QEvent* event) +{ + if ((watched == m_searchInput) && (event->type() == QEvent::FocusIn)) { + // Postpone the creation of the search completer until + // the search box is used. This decreases the startup time + // of Dolphin. + Q_ASSERT(m_completer == 0); + m_completer = new DolphinSearchCompleter(m_searchInput); + m_searchInput->removeEventFilter(this); + } + + return QWidget::eventFilter(watched, event); +} + + +void DolphinSearchBox::emitSearchSignal() +{ + emit search(KUrl("nepomuksearch:/" + m_searchInput->text())); +} + +void DolphinSearchBox::slotTextEdited(const QString& text) +{ +} + +#include "dolphinsearchbox.moc" diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h new file mode 100644 index 000000000..93c033bb8 --- /dev/null +++ b/src/search/dolphinsearchbox.h @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2009 by Peter Penz <[email protected]> * + * Copyright (C) 2009 by Matthias Fuchs <[email protected]> * + * * + * 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 2 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, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ +#ifndef DOLPHINSEARCHBOX_H +#define DOLPHINSEARCHBOX_H + +#include <QWidget> + +#include <KIcon> + +class KLineEdit; +class KUrl; +class QCompleter; +class QModelIndex; +class QStandardItemModel; +class QToolButton; + +/** + * @brief used for completition for the DolphinSearchBox + */ +class DolphinSearchCompleter : public QObject +{ + Q_OBJECT + public: + DolphinSearchCompleter(KLineEdit *linedit); + + public slots: + void highlighted(const QModelIndex& index); + void activated(const QModelIndex& index); + void slotTextEdited(const QString &text); + + private: + void addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description = QString(), const QString& toolTip = QString(), const KIcon& icon = KIcon()); + + void findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input); + + private: + KLineEdit* q; + QCompleter* m_completer; + QStandardItemModel* m_completionModel; + QString m_userText; + int m_wordStart; + int m_wordEnd; +}; + +/** + * @brief Input box for searching files with Nepomuk. + */ +class DolphinSearchBox : public QWidget +{ + Q_OBJECT + +public: + DolphinSearchBox(QWidget* parent = 0); + virtual ~DolphinSearchBox(); + +protected: + virtual bool event(QEvent* event); + virtual bool eventFilter(QObject* watched, QEvent* event); + +signals: + /** + * Is emitted when the user pressed Return or Enter + * and provides the Nepomuk URL that should be used + * for searching. + */ + void search(const KUrl& url); + +private slots: + void emitSearchSignal(); + void slotTextEdited(const QString& text); + +private: + KLineEdit* m_searchInput; + QToolButton* m_searchButton; + + DolphinSearchCompleter* m_completer; +}; + +#endif diff --git a/src/search/dolphinsearchcommands.desktop b/src/search/dolphinsearchcommands.desktop new file mode 100644 index 000000000..303f8d0cf --- /dev/null +++ b/src/search/dolphinsearchcommands.desktop @@ -0,0 +1,276 @@ +# Name -- what is displayed in the first column +# Comment -- what is displayed in the second column +# Completion -- what is returned as completion item + +[dolphin and] +#ctx: and as in a logic operator to connect search terms +Name=and +Comment=logic operator and +Comment[csb]=logiczny òperatora ë +Comment[en_GB]=logic operator and +Comment[eo]=logika operatoro "kaj" +Comment[et]=Loogiline JA +Comment[is]=rökaðgerðin og +Comment[nl]=logische operator en +Comment[pt]=operador lógico 'e' +Comment[pt_BR]=operador lógico 'e' +Comment[sv]=logisk operator och +Comment[tr]=mantıksal işleç olarak ve +Comment[uk]=булівська дія «ТА» +Comment[x-test]=xxlogic operator andxx +Comment[zh_TW]=邏輯運算上的「且」(and) +Completion=and + +[dolphin or] +#ctx: or as in a logic operator to connect search terms +Name=or +Comment=logic operator or +Comment[csb]=logiczny òperatora abò +Comment[en_GB]=logic operator or +Comment[eo]=logika operatoro "aŭ" +Comment[et]=Loogiline VÕI +Comment[is]=rökaðgerðin eða +Comment[nl]=logische operator of +Comment[pt]=operador lógico 'ou' +Comment[pt_BR]=operador lógico 'ou' +Comment[sv]=logisk operator eller +Comment[tr]=mantıksal işleç olarak veya +Comment[uk]=булівська дія «АБО» +Comment[x-test]=xxlogic operator orxx +Comment[zh_TW]=邏輯運算上的「或」(or) +Completion=or + +[dolphin not] +#ctx: not as in a logic operator to connect search terms +Name=not +Comment=logic operator not +Comment[csb]=logiczny òperatora nié +Comment[en_GB]=logic operator not +Comment[eo]=logika operatoro "ne" +Comment[et]=Loogiline EI +Comment[is]=rökaðgerðin ekki +Comment[nl]=logische operator niet +Comment[pt]=operador lógico 'não' +Comment[pt_BR]=operador lógico 'não' +Comment[sv]=logisk operator inte +Comment[tr]=mantıksal işleç olarak değil +Comment[uk]=булівська дія «НЕ» +Comment[x-test]=xxlogic operator notxx +Comment[zh_TW]=邏輯運算上的「否」(not) +Completion=- + +[dolphin fileExtension] +Name=File extension +Name[csb]=Rozszérzenié lopka +Name[en_GB]=File extension +Name[eo]=Dosier-sufikso +Name[et]=Faililaiend +Name[is]=Skráarending +Name[nl]=Bestandsextensie +Name[pt]=Extensão do ficheiro +Name[pt_BR]=Extensão do arquivo +Name[sv]=Filändelse +Name[tr]=Dosya uzantısı +Name[uk]=Суфікс назви файла +Name[x-test]=xxFile extensionxx +Name[zh_TW]=副檔名 +Comment=for example txt +Comment[csb]=na przëmiôr txt +Comment[en_GB]=for example txt +Comment[eo]=ekzemple "txt" +Comment[et]=näiteks txt +Comment[is]=til dæmis txt +Comment[nl]=bijvoorbeeld txt +Comment[pt]=por exemplo 'txt' +Comment[pt_BR]=por exemplo, 'txt' +Comment[sv]=till exempel txt +Comment[tr]=örneğin txt +Comment[uk]=наприклад, txt +Comment[x-test]=xxfor example txtxx +Comment[zh_TW]=例如 txt +Completion=fileExtension: +Icon=preferences-desktop-filetype-association + +[dolphin rating] +#ctx: rating of nepomuk resources +Name=Rating +#NOTE "=" does not work here, ":" does +Comment=1 to 10, for example >=7 +Comment[csb]=1 do 10, na przëmiôr >=7 +Comment[en_GB]=1 to 10, for example >=7 +Comment[eo]=1 ĝis 10, ekzemple >=7 +Comment[et]=1 kuni 10, näiteks 7 +Comment[is]=1 til 10, til dæmis >=7 +Comment[nl]=1 tot 10, bijvoorbeeld >=7 +Comment[pt]=1 a 10, por exemplo >=7 +Comment[pt_BR]=1 a 10, por exemplo, >=7 +Comment[sv]=1 till 10, till exempel: >=7 +Comment[tr]=1'den 10'a kadar, örnek >=7 +Comment[uk]=Від 1 до 10, наприклад, >=7 +Comment[x-test]=xx1 to 10, for example >=7xx +Comment[zh_TW]=1 到 10,例如 >=7 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=rating +Icon=favorites + +[dolphin tag] +#ctx: Tag as in Nepomuk::Tag", "Tag" +Name=Tag +Comment=Tag +Comment[csb]=Znakòwnik +Comment[en_GB]=Tag +Comment[eo]=Marko +Comment[et]=Silt +Comment[gu]=ટેગ +Comment[is]=Merki +Comment[nl]=Tag +Comment[pt]=Marca +Comment[pt_BR]=Etiqueta +Comment[sv]=Etikett +Comment[tr]=Etiket +Comment[uk]=Мітка +Comment[x-test]=xxTagxx +Comment[zh_TW]=標籤 +Completion=tag: +Icon=mail-tagged + +[dolphin title] +#ctx: The title of a song etc. +Name=Title +Completion=title: + +[dolphin filesize] +Name=File size +Name[csb]=Miara lopka +Name[en_GB]=File size +Name[eo]=Dosiergrandeco +Name[et]=Faili suurus +Name[gu]=ફાઇલ કદ +Name[is]=Skráarstærð +Name[nl]=Bestandsgrootte +Name[pt]=Tamanho do ficheiro +Name[pt_BR]=Tamanho do arquivo +Name[sv]=Filstorlek +Name[tr]=Dosya boyutu +Name[uk]=Розмір файла +Name[x-test]=xxFile sizexx +Name[zh_TW]=檔案大小 +Comment=in bytes, for example >1000 +Comment[csb]=w bajtach, na przëmiôr >1000 +Comment[en_GB]=in bytes, for example >1000 +Comment[et]=baitides, näiteks >1000 +Comment[is]=í bætum, til dæmis >1000 +Comment[nl]=in bytes, bijvoorbeeld >1000 +Comment[pt]=em 'bytes', por exemplo > 1000 +Comment[pt_BR]=em bytes, por exemplo, > 1000 +Comment[sv]=i byte, till exempel > 1000 +Comment[tr]=bayt olarak, örnek >1000 +Comment[uk]=у байтах, наприклад, >1000 +Comment[x-test]=xxin bytes, for example >1000xx +Comment[zh_TW]=單位為位元,例如 >1000 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=contentSize + +[dolphin contentsize] +Name=Content size +Name[csb]=Miara zamkłoscë +Name[en_GB]=Content size +Name[et]=Sisu suurus +Name[gu]=વિગત કદ +Name[is]=Stærð innihalds +Name[nl]=Grootte van de inhoud +Name[pt]=Tamanho do conteúdo +Name[pt_BR]=Tamanho do conteúdo +Name[sv]=Innehållets storlek +Name[tr]=İçerik boyutu +Name[uk]=Розмір вмісту +Name[x-test]=xxContent sizexx +Name[zh_TW]=內容大小 +Comment=in bytes +Comment[csb]=w bajtach +Comment[en_GB]=in bytes +Comment[et]=baitides +Comment[gu]=બાઈટ્સ માં +Comment[is]=í bætum +Comment[nl]=in bytes +Comment[pt]=em 'bytes' +Comment[pt_BR]=em bytes +Comment[sv]=i byte +Comment[tr]=bayt olarak +Comment[uk]=у байтах +Comment[x-test]=xxin bytesxx +Comment[zh_TW]=單位為位元 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=contentSize + +[dolphin lastmodified] +#ctx: When the resource was last modified +Name=Last modified +Comment=for example >1999-10-10 +Comment[csb]=na przëmiôr >1999-10-10 +Comment[en_GB]=for example >1999-10-10 +Comment[eo]=Ekzemple >1999-10-10 +Comment[et]=näiteks >1999-10-10 +Comment[is]=til dæmis >1999-10-10 +Comment[nl]=bijvoorbeeld >2009-10-10 +Comment[pt]=por exemplo > 1999-10-10 +Comment[pt_BR]=por exemplo, > 1999-10-10 +Comment[sv]=till exempel > 1999-10-10 +Comment[tr]=örnek >1999-10-10 +Comment[uk]=наприклад, >1999-10-10 +Comment[x-test]=xxfor example >1999-10-10xx +Comment[zh_TW]=例如 >1999-10-10 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=lastModified |
