┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search
diff options
context:
space:
mode:
Diffstat (limited to 'src/search')
-rw-r--r--src/search/dolphinsearchbox.cpp318
-rw-r--r--src/search/dolphinsearchbox.h96
-rw-r--r--src/search/dolphinsearchcommands.desktop276
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