gdesktopappinfo: Prefer matches that occur earlier in the match string

Some apps names or keywords contain multiple words. For example 'LibreOffice
Calc' contains the word 'Calc'. This is rightfully detected as a prefix match,
however generally it is expected that searching for 'calc' would consistantly
return 'Calculator' in first position, instead of ranking them equally.

We now prioritise tokens that would otherwise rank equal based on where they
occur in the string, giving earlier occurences precedence.
This commit is contained in:
Fina Wilke
2024-10-23 20:34:43 +02:00
parent 39b5613e73
commit b36e646b54
6 changed files with 415 additions and 37 deletions

View File

@@ -536,6 +536,7 @@ struct search_result
const gchar *app_name;
gint category;
gint match_type;
gint token_pos;
};
static struct search_result *static_token_results;
@@ -589,13 +590,20 @@ compare_categories (gconstpointer a,
if (ra->match_type != rb->match_type)
return ra->match_type - rb->match_type;
return ra->category - rb->category;
if (ra->category != rb->category)
return ra->category - rb->category;
/* We prefer matches that occur earlier in the string. Eg. this will match 'Calculator'
* before 'LibreOffice Calc' when searching for 'calc'.
*/
return ra->token_pos - rb->token_pos;
}
static void
add_token_result (const gchar *app_name,
guint16 category,
guint16 match_type)
guint16 match_type,
guint16 token_pos)
{
if G_UNLIKELY (static_token_results_size == static_token_results_allocated)
{
@@ -606,6 +614,7 @@ add_token_result (const gchar *app_name,
static_token_results[static_token_results_size].app_name = app_name;
static_token_results[static_token_results_size].category = category;
static_token_results[static_token_results_size].match_type = match_type;
static_token_results[static_token_results_size].token_pos = token_pos;
static_token_results_size++;
}
@@ -696,6 +705,9 @@ merge_token_results (gboolean first)
* Writer should be higher priority than LibreOffice Draw with
* `lib w`.
*
* We prioritize tokens that occur near the start of the string
* over tokens that appear near the end.
*
* (This ignores the difference between partly prefix matches and
* all substring matches, however most time we just focus on exact
* prefix matches, who cares the 10th-20th search results?)
@@ -705,6 +717,8 @@ merge_token_results (gboolean first)
static_token_results[i].category);
static_search_results[j].match_type = MAX (static_search_results[k].match_type,
static_token_results[i].match_type);
static_search_results[j].token_pos = MAX (static_search_results[k].token_pos,
static_token_results[i].token_pos);
j++;
}
}
@@ -1091,7 +1105,8 @@ typedef GHashTable MemoryIndex;
struct _MemoryIndexEntry
{
const gchar *app_name; /* pointer to the hashtable key */
gint match_category;
gint match_category; /* the entry key (Name, Exec, ...) */
gint token_pos; /* the position of the token in the field */
MemoryIndexEntry *next;
};
@@ -1113,6 +1128,7 @@ static void
memory_index_add_token (MemoryIndex *mi,
const gchar *token,
gint match_category,
gint token_pos,
const gchar *app_name)
{
MemoryIndexEntry *mie, *first;
@@ -1120,6 +1136,7 @@ memory_index_add_token (MemoryIndex *mi,
mie = g_slice_new (MemoryIndexEntry);
mie->app_name = app_name;
mie->match_category = match_category;
mie->token_pos = token_pos;
first = g_hash_table_lookup (mi, token);
@@ -1142,15 +1159,16 @@ memory_index_add_string (MemoryIndex *mi,
const gchar *app_name)
{
gchar **tokens, **alternates;
gint i;
gint i, n;
tokens = g_str_tokenize_and_fold (string, NULL, &alternates);
for (i = 0; tokens[i]; i++)
memory_index_add_token (mi, tokens[i], match_category, app_name);
memory_index_add_token (mi, tokens[i], match_category, i, app_name);
n = i;
for (i = 0; alternates[i]; i++)
memory_index_add_token (mi, alternates[i], match_category, app_name);
memory_index_add_token (mi, alternates[i], match_category, n + i, app_name);
g_strfreev (alternates);
g_strfreev (tokens);
@@ -1231,7 +1249,7 @@ desktop_file_dir_unindexed_setup_search (DesktopFileDir *dir)
/* Make note of the Implements= line */
implements = g_key_file_get_string_list (key_file, "Desktop Entry", "Implements", NULL, NULL);
for (i = 0; implements && implements[i]; i++)
memory_index_add_token (dir->memory_implementations, implements[i], 0, app);
memory_index_add_token (dir->memory_implementations, implements[i], i, 0, app);
g_strfreev (implements);
}
@@ -1272,7 +1290,7 @@ desktop_file_dir_unindexed_search (DesktopFileDir *dir,
while (mie)
{
add_token_result (mie->app_name, mie->match_category, match_type);
add_token_result (mie->app_name, mie->match_category, match_type, mie->token_pos);
mie = mie->next;
}
}
@@ -4740,6 +4758,7 @@ g_desktop_app_info_search (const gchar *search_string)
gchar **search_tokens;
gint last_category = -1;
gint last_match_type = -1;
gint last_token_pos = -1;
gchar ***results;
gint n_groups = 0;
gint start_of_group;
@@ -4767,10 +4786,12 @@ g_desktop_app_info_search (const gchar *search_string)
/* Count the total number of unique categories and match types */
for (i = 0; i < static_total_results_size; i++)
if (static_total_results[i].category != last_category ||
static_total_results[i].match_type != last_match_type)
static_total_results[i].match_type != last_match_type ||
static_total_results[i].token_pos != last_token_pos)
{
last_category = static_total_results[i].category;
last_match_type = static_total_results[i].match_type;
last_token_pos = static_total_results[i].token_pos;
n_groups++;
}
@@ -4783,14 +4804,17 @@ g_desktop_app_info_search (const gchar *search_string)
gint n_items_in_group = 0;
gint this_category;
gint this_match_type;
gint this_token_pos;
gint j;
this_category = static_total_results[start_of_group].category;
this_match_type = static_total_results[start_of_group].match_type;
this_token_pos = static_total_results[start_of_group].token_pos;
while (start_of_group + n_items_in_group < static_total_results_size &&
static_total_results[start_of_group + n_items_in_group].category == this_category &&
static_total_results[start_of_group + n_items_in_group].match_type == this_match_type)
static_total_results[start_of_group + n_items_in_group].match_type == this_match_type &&
static_total_results[start_of_group + n_items_in_group].token_pos == this_token_pos)
n_items_in_group++;
results[i] = g_new (gchar *, n_items_in_group + 1);

View File

@@ -876,15 +876,15 @@ assert_implementations (const gchar *interface,
g_free (result);
}
#define ALL_USR_APPS "evince-previewer.desktop nautilus-classic.desktop gnome-font-viewer.desktop " \
"baobab.desktop yelp.desktop eog.desktop cheese.desktop org.gnome.clocks.desktop " \
"gnome-contacts.desktop kde4-kate.desktop gcr-prompter.desktop totem.desktop " \
"gnome-terminal.desktop nautilus-autorun-software.desktop gcr-viewer.desktop " \
"nautilus-connect-server.desktop kde4-dolphin.desktop gnome-music.desktop " \
"kde4-konqbrowser.desktop gucharmap.desktop kde4-okular.desktop nautilus.desktop " \
"gedit.desktop evince.desktop file-roller.desktop dconf-editor.desktop glade.desktop " \
"invalid-desktop.desktop"
#define HOME_APPS "epiphany-weather-for-toronto-island-9c6a4e022b17686306243dada811d550d25eb1fb.desktop"
#define ALL_USR_APPS "evince-previewer.desktop nautilus-classic.desktop gnome-font-viewer.desktop " \
"baobab.desktop yelp.desktop eog.desktop cheese.desktop org.gnome.clocks.desktop " \
"gnome-contacts.desktop kde4-kate.desktop gcr-prompter.desktop totem.desktop " \
"gnome-terminal.desktop nautilus-autorun-software.desktop gcr-viewer.desktop " \
"nautilus-connect-server.desktop kde4-dolphin.desktop gnome-music.desktop " \
"kde4-konqbrowser.desktop gucharmap.desktop kde4-okular.desktop nautilus.desktop " \
"gedit.desktop evince.desktop file-roller.desktop dconf-editor.desktop glade.desktop " \
"invalid-desktop.desktop org.gnome.Calculator.desktop libreoffice-calc.desktop"
#define HOME_APPS "epiphany-weather-for-toronto-island-9c6a4e022b17686306243dada811d550d25eb1fb.desktop"
#define ALL_HOME_APPS HOME_APPS " eog.desktop"
static void
@@ -923,9 +923,14 @@ test_search (void)
* match the prefix command ("/bin/sh") in the Exec= line though. Then with
* substring matching, Image Viewer (eog) should be in next group because it
* contains "Slideshow" in its keywords.
*
* Finally we have LibreOffice Calc, which contains "OpenDocument Spreadsheet".
* It is sorted last because its match ("sh" in "Spreadsheet") occurs in a
* later token.
*/
assert_search ("sh", "gnome-terminal.desktop\n"
"eog.desktop\n", TRUE, FALSE, NULL, NULL);
"eog.desktop\n"
"libreoffice-calc.desktop\n", TRUE, FALSE, NULL, NULL);
/* "frobnicator.desktop" is ignored by get_all() because the binary is
* missing, but search should still find it (to avoid either stale results
@@ -947,6 +952,18 @@ test_search (void)
"dconf-editor.desktop\n"
"nautilus-classic.desktop\n", TRUE, TRUE, NULL, NULL);
/* We prefer matches of tokens that come earlier in a string. In this case
* "LibreOffice Calc" and "Calculator" both have a name that contains a prefix
* match "cal", but the one in Calculator occurs in the first token.
*/
assert_search ("cal", "org.gnome.Calculator.desktop\nlibreoffice-calc.desktop\n", TRUE, TRUE, NULL, NULL);
/* Same as above, but ensure that substring matches are sorted after prefix matches */
assert_search ("ca", "org.gnome.Calculator.desktop\n"
"libreoffice-calc.desktop\n"
"frobnicator.desktop\n"
"cheese.desktop\n", TRUE, TRUE, NULL, NULL);
/* "gnome" will match "eye of gnome" from the user's directory, plus
* matching "GNOME Clocks" X-GNOME-FullName.
*/

View File

@@ -0,0 +1,40 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-calc
Type=Application
Categories=Office;Spreadsheet;X-Red-Hat-Base;
Exec=true %U
MimeType=application/clarisworks;application/csv;application/excel;application/msexcel;application/tab-separated-values;application/vnd.apache.parquet;application/vnd.apple.numbers;application/vnd.lotus-1-2-3;application/vnd.ms-excel;application/vnd.ms-excel.sheet.binary.macroEnabled.12;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-works;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.stardivision.calc;application/vnd.stardivision.chart;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/x-123;application/x-dbase;application/x-dbf;application/x-dos_ms_excel;application/x-excel;application/x-gnumeric;application/x-iwork-numbers-sffnumbers;application/x-ms-excel;application/x-msexcel;application/x-quattropro;application/x-starcalc;application/x-starchart;text/comma-separated-values;text/csv;text/spreadsheet;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;
Name=LibreOffice Calc
GenericName=Spreadsheet
Comment=Perform calculations, analyze information and manage lists in spreadsheets.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Accounting;Stats;OpenDocument Spreadsheet;Chart;Microsoft Excel;Microsoft Works;OpenOffice Calc;ods;xls;xlsx;
InitialPreference=5
StartupWMClass=libreoffice-calc
X-KDE-Protocols=file,http,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Spreadsheet
Icon=document-new
Exec=true %U

View File

@@ -1,8 +1,12 @@
[MIME Cache]
application/clarisworks=libreoffice-calc.desktop;
application/csv=libreoffice-calc.desktop;
application/excel=libreoffice-calc.desktop;
application/msexcel=libreoffice-calc.desktop;
application/mxf=totem.desktop;
application/ogg=totem.desktop;
application/oxps=evince.desktop;evince-previewer.desktop;
application/pdf=evince.desktop;evince-previewer.desktop;
application/oxps=evince-previewer.desktop;evince.desktop;
application/pdf=evince-previewer.desktop;evince.desktop;
application/pkcs10=gcr-viewer.desktop;
application/pkcs10+pem=gcr-viewer.desktop;
application/pkcs12=gcr-viewer.desktop;
@@ -19,12 +23,33 @@ application/ram=totem.desktop;
application/sdp=totem.desktop;
application/smil=totem.desktop;
application/smil+xml=totem.desktop;
application/tab-separated-values=libreoffice-calc.desktop;
application/vnd.apache.parquet=libreoffice-calc.desktop;
application/vnd.apple.mpegurl=totem.desktop;
application/vnd.apple.numbers=libreoffice-calc.desktop;
application/vnd.kde.okular-archive=kde4-okular.desktop;
application/vnd.lotus-1-2-3=libreoffice-calc.desktop;
application/vnd.ms-cab-compressed=file-roller.desktop;
application/vnd.ms-excel=libreoffice-calc.desktop;
application/vnd.ms-excel.sheet.binary.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.ms-excel.sheet.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.ms-excel.template.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.ms-works=libreoffice-calc.desktop;
application/vnd.ms-wpl=totem.desktop;
application/vnd.ms-xpsdocument=evince.desktop;evince-previewer.desktop;
application/vnd.ms-xpsdocument=evince-previewer.desktop;evince.desktop;
application/vnd.oasis.opendocument.chart=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.chart-template=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.spreadsheet-flat-xml=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop;
application/vnd.rn-realmedia=totem.desktop;
application/vnd.stardivision.calc=libreoffice-calc.desktop;
application/vnd.stardivision.chart=libreoffice-calc.desktop;
application/vnd.sun.xml.calc=libreoffice-calc.desktop;
application/vnd.sun.xml.calc.template=libreoffice-calc.desktop;
application/x-123=libreoffice-calc.desktop;
application/x-7z-compressed=file-roller.desktop;
application/x-7z-compressed-tar=file-roller.desktop;
application/x-ace=file-roller.desktop;
@@ -36,18 +61,22 @@ application/x-bzip=file-roller.desktop;
application/x-bzip-compressed-tar=file-roller.desktop;
application/x-bzip1=file-roller.desktop;
application/x-bzip1-compressed-tar=file-roller.desktop;
application/x-bzpdf=evince.desktop;evince-previewer.desktop;
application/x-bzpdf=evince-previewer.desktop;evince.desktop;
application/x-cabinet=file-roller.desktop;
application/x-cb7=evince.desktop;evince-previewer.desktop;
application/x-cbr=evince.desktop;evince-previewer.desktop;file-roller.desktop;
application/x-cbt=evince.desktop;evince-previewer.desktop;
application/x-cbz=evince.desktop;evince-previewer.desktop;file-roller.desktop;
application/x-cb7=evince-previewer.desktop;evince.desktop;
application/x-cbr=evince-previewer.desktop;evince.desktop;file-roller.desktop;
application/x-cbt=evince-previewer.desktop;evince.desktop;
application/x-cbz=evince-previewer.desktop;evince.desktop;file-roller.desktop;
application/x-cd-image=file-roller.desktop;
application/x-compress=file-roller.desktop;
application/x-compressed-tar=file-roller.desktop;
application/x-cpio=file-roller.desktop;
application/x-dbase=libreoffice-calc.desktop;
application/x-dbf=libreoffice-calc.desktop;
application/x-deb=file-roller.desktop;
application/x-dos_ms_excel=libreoffice-calc.desktop;
application/x-ear=file-roller.desktop;
application/x-excel=libreoffice-calc.desktop;
application/x-extension-m4a=totem.desktop;
application/x-extension-mp4=totem.desktop;
application/x-flac=totem.desktop;
@@ -58,10 +87,12 @@ application/x-font-ttf=gnome-font-viewer.desktop;
application/x-font-type1=gnome-font-viewer.desktop;
application/x-glade=glade.desktop;
application/x-gnome-saved-search=nautilus.desktop;
application/x-gnumeric=libreoffice-calc.desktop;
application/x-gtar=file-roller.desktop;
application/x-gzip=file-roller.desktop;
application/x-gzpdf=evince.desktop;evince-previewer.desktop;
application/x-gzpdf=evince-previewer.desktop;evince.desktop;
application/x-gzpostscript=file-roller.desktop;
application/x-iwork-numbers-sffnumbers=libreoffice-calc.desktop;
application/x-java-archive=file-roller.desktop;
application/x-lha=file-roller.desktop;
application/x-lhz=file-roller.desktop;
@@ -75,13 +106,16 @@ application/x-lzop=file-roller.desktop;
application/x-lzop-compressed-tar=file-roller.desktop;
application/x-matroska=totem.desktop;
application/x-ms-dos-executable=file-roller.desktop;
application/x-ms-excel=libreoffice-calc.desktop;
application/x-ms-wim=file-roller.desktop;
application/x-msexcel=libreoffice-calc.desktop;
application/x-netshow-channel=totem.desktop;
application/x-ogg=totem.desktop;
application/x-pem-file=gcr-viewer.desktop;
application/x-pem-key=gcr-viewer.desktop;
application/x-pkcs12=gcr-viewer.desktop;
application/x-pkcs7-certificates=gcr-viewer.desktop;
application/x-quattropro=libreoffice-calc.desktop;
application/x-quicktime-media-link=totem.desktop;
application/x-quicktimeplayer=totem.desktop;
application/x-rar=file-roller.desktop;
@@ -93,6 +127,8 @@ application/x-shorten=totem.desktop;
application/x-smil=totem.desktop;
application/x-spkac=gcr-viewer.desktop;
application/x-spkac+base64=gcr-viewer.desktop;
application/x-starcalc=libreoffice-calc.desktop;
application/x-starchart=libreoffice-calc.desktop;
application/x-stuffit=file-roller.desktop;
application/x-tar=file-roller.desktop;
application/x-tarz=file-roller.desktop;
@@ -101,7 +137,7 @@ application/x-x509-ca-cert=gcr-viewer.desktop;
application/x-x509-user-cert=gcr-viewer.desktop;
application/x-xz=file-roller.desktop;
application/x-xz-compressed-tar=file-roller.desktop;
application/x-xzpdf=evince.desktop;evince-previewer.desktop;
application/x-xzpdf=evince-previewer.desktop;evince.desktop;
application/x-zip=file-roller.desktop;
application/x-zip-compressed=file-roller.desktop;
application/x-zoo=file-roller.desktop;
@@ -164,7 +200,7 @@ image/pjpeg=eog.desktop;
image/png=eog.desktop;
image/svg+xml=eog.desktop;
image/svg+xml-compressed=eog.desktop;
image/tiff=eog.desktop;evince.desktop;evince-previewer.desktop;
image/tiff=eog.desktop;evince-previewer.desktop;evince.desktop;
image/vnd.rn-realpix=totem.desktop;
image/vnd.wap.wbmp=eog.desktop;
image/x-bmp=eog.desktop;
@@ -180,10 +216,16 @@ image/x-portable-graymap=eog.desktop;
image/x-portable-pixmap=eog.desktop;
image/x-xbitmap=eog.desktop;
image/x-xpixmap=eog.desktop;
inode/directory=kde4-dolphin.desktop;baobab.desktop;nautilus.desktop;
inode/directory=baobab.desktop;kde4-dolphin.desktop;nautilus.desktop;
misc/ultravox=totem.desktop;
text/comma-separated-values=libreoffice-calc.desktop;
text/csv=libreoffice-calc.desktop;
text/google-video-pointer=totem.desktop;
text/plain=kde4-kate.desktop;gedit.desktop;
text/plain=gedit.desktop;kde4-kate.desktop;
text/spreadsheet=libreoffice-calc.desktop;
text/tab-separated-values=libreoffice-calc.desktop;
text/x-comma-separated-values=libreoffice-calc.desktop;
text/x-csv=libreoffice-calc.desktop;
text/x-google-video-pointer=totem.desktop;
video/3gp=totem.desktop;
video/3gpp=totem.desktop;

View File

@@ -0,0 +1,255 @@
[Desktop Entry]
Name[af]=Sakrekenaar
Name[ar]=آلة حاسبة
Name[as]=গণক
Name[ast]=Calculadora
Name[az]=Hesaplayıcı
Name[be@latin]=Kalkulatar
Name[be]=Калькулятар
Name[bg]=Калкулатор
Name[bn_IN]=ক্যালকুলেটর
Name[bn]=ক্যালকুলেটর
Name[bs]=Računalo
Name[ca]=Calculadora
Name[ca@valencia]=Calculadora
Name[cs]=Kalkulačka
Name[cy]=Cyfrifiannell
Name[da]=Lommeregner
Name[de]=Taschenrechner
Name[dz]=རྩིས་འཕྲུལ།
Name[el]=Αριθμομηχανή
Name[en_CA]=Calculator
Name[en_GB]=Calculator
Name[en@shaw]=𐑒𐑨𐑤𐑒𐑿𐑤𐑱𐑑𐑼
Name[eo]=Kalkulilo
Name[es]=Calculadora
Name[et]=Kalkulaator
Name[eu]=Kalkulagailua
Name[fa]=ماشین‌حساب
Name[fi]=Laskin
Name[fo]=Roknimaskina
Name[fr]=Calculatrice
Name[fur]=Calcoladorie
Name[ga]=Áireamhán
Name[gd]=Àireamhair
Name[gl]=Calculadora
Name[gu]=કૅલ્ક્યુલેટર
Name[he]=מחשבון
Name[hi]=कैलकुलेटर
Name[hr]=Kalkulator
Name[hu]=Számológép
Name[hy]=Հաշվիչ
Name[id]=Kalkulator
Name[it]=Calcolatrice
Name[ja]=電卓
Name[ka]=კალკულატორი
Name[kab]=Tamsiḍent
Name[kk]=Калькулятор
Name[km]=ម៉ាស៊ីន​គិត​លេខ
Name[kn]=ಕ್ಯಾಲ್ಕುಲೇಟರ್
Name[ko]=계산기
Name[lt]=Skaičiuotuvas
Name[lv]=Kalkulators
Name[mai]=कैलकुलेटर
Name[mg]=Milina mpikajy
Name[mjw]=Calculator
Name[mk]=Калкулатор
Name[ml]=ഗണനി
Name[mn]=Тооны машин
Name[mr]=गणनयंत्र
Name[ms]=Kalkulator
Name[my]=ဂဏန်းတွက်စက်
Name[nb]=Kalkulator
Name[ne]=गणकयन्त्र
Name[nl]=Rekenmachine
Name[nn]=Kalkulator
Name[oc]=Calculadoira
Name[or]=କାଲକୁଲେଟର
Name[pa]=ਕੈਲਕੂਲੇਟਰ
Name[pl]=Kalkulator
Name[pt_BR]=Calculadora
Name[pt]=Calculadora
Name[ro]=Calculator
Name[ru]=Калькулятор
Name[si]=ගණකය
Name[sk]=Kalkulačka
Name[sl]=Računalo
Name[sq]=Makinë llogaritëse
Name[sr@latin]=Kalkulator
Name[sr]=Калкулатор
Name[sv]=Kalkylator
Name[ta]=கணிப்பான்
Name[te]=గణన పరికరం
Name[tg]=Калкулатор
Name[th]=เครื่องคิดเลข
Name[tk]=Çot
Name[tr]=Hesap Makinesi
Name[ug]=ھېسابلىغۇچ
Name[uk]=Калькулятор
Name[vi]=Máy tính bỏ túi
Name[xh]=Ikhaltyuleyitha
Name[zh_CN]=计算器
Name[zh_HK]=計數機
Name[zh_TW]=計算機
Name=Calculator
Comment[af]=Voer rekenkundige, wetenskaplike of finansiële berekeninge uit
Comment[ar]=قم بحسابات رياضيّة وعلميّة وماليّة
Comment[as]=গণিতিক, বিজ্ঞানভিত্তিক অথবা আৰ্থিক গণনাসমূহ কৰক
Comment[ast]=Fai cálculos aritméticos, científicos o financieros
Comment[be]=Арыфметычныя, навуковыя і фінансавыя разлікі
Comment[bg]=Извършване на аритметични, научни или финансови изчисления
Comment[bn_IN]=গণিত, বৈজ্ঞানিক অথবা অর্থনৈতিক প্রণালী করুন
Comment[bn]=গাণিতিক, বৈজ্ঞানিক অথবা অর্থনৈতিক গণনা সম্পাদন করা হবে
Comment[bs]=Obavi aritmetičke, naučne ili finansijske proračune
Comment[ca]=Realitzeu càlculs aritmètics, científics o financers
Comment[ca@valencia]=Realitza càlculs aritmètics, científics o financers
Comment[cs]=Provádějte aritmetické, vědecké i finanční výpočty
Comment[da]=Udfør aritmetiske, videnskabelige eller finansielle udregninger
Comment[de]=Arithmetische, wissenschaftliche und finanztechnische Berechnungen durchführen
Comment[dz]=མཚན་རིགས་ དངུལ་འབྲེལ་ ཡང་ན་ ཨང་རྩིས་ཀྱི་ རྩིས་ལས་ཀྱི་ ལས་འགན་བསྒྲུབ་
Comment[el]=Εκτελεί αριθμητικούς, επιστημονικούς ή εμπορικούς υπολογισμούς
Comment[en_CA]=Perform arithmetic, scientific or financial calculations
Comment[en_GB]=Perform arithmetic, scientific or financial calculations
Comment[en@shaw]=𐑐𐑼𐑓𐑹𐑥 𐑼𐑦𐑔𐑥𐑩𐑑𐑦𐑒, 𐑕𐑲𐑩𐑯𐑑𐑦𐑓𐑦𐑒 𐑹 𐑓𐑲𐑯𐑨𐑯𐑖𐑩𐑤 𐑒𐑨𐑤𐑒𐑿𐑤𐑱𐑖𐑩𐑯𐑟
Comment[eo]=Fari aritmetikajn, sciencajn aŭ financajn kalkulojn
Comment[es]=Realice cálculos aritméticos, científicos o financieros
Comment[et]=Aritmeetilised, teaduslikud ja finantsarvutused
Comment[eu]=Egin kalkulu aritmetikoak, zientifikoak edo finantzarioak
Comment[fa]=انجام محاسبات ریاضی، علمی و مالی
Comment[fi]=Suorita aritmeettisia, tieteellisiä tai talouslaskutoimituksia
Comment[fo]=Avrika talfrøðiskar, vísindaligar ella fíggjarligar útrokningar
Comment[fr]=Effectue des calculs arithmétiques, scientifiques ou financiers
Comment[fur]=Eseguìs calcui aritmetics, sientifics o finanziaris
Comment[gd]=Dèan cunntadh àireamhachd, saidheansail no ionmhais
Comment[gl]=Realice cálculos aritméticos, científicos ou financeiros
Comment[gu]=ગાણિતીક, વૈજ્ઞાનિક અથવા આર્થિક ગણતરીઓ કરો
Comment[he]=ביצוע חישובים פשוטים, מדעיים או כלכליים
Comment[hi]=अंकगणित, वैज्ञानिक या वित्तीय गणना करें
Comment[hr]=Izvodite aritmetičke, znanstvene ili financijske izračune
Comment[hu]=Aritmetikai, tudományos vagy pénzügyi számítások végrehajtása
Comment[hy]=Կատարել թվաբանական, գիտական կամ ֆինանսական հաշվարկներ
Comment[id]=Lakukan perhitungan aritmetik, ilmiah, atau keuangan
Comment[it]=Esegue calcoli aritmetici, scientifici e finanziari
Comment[ja]=算術/科学/財務の計算を行います
Comment[ka]=არითმეტიკული, სამეცნიერო და ფინანსური გამოთვლები
Comment[kk]=Қарапайым, ғылыми не қаржылық есептеулерді жүргізу
Comment[km]=អនុវត្ត​ការ​គណនា​គណិតវិទ្យា វិទ្យាសាស្ត្រ ឬ​ហិរញ្ញវត្ថុ
Comment[kn]=ಗಣಿತ, ವೈಜ್ಞಾನಿಕ ಅಥವಾ ಹಣಕಾಸಿನ ಲೆಕ್ಕಚಾರಗಳನ್ನು ಮಾಡಿ
Comment[ko]=일반 연산, 과학, 재무용 계산을 합니다
Comment[lt]=Atlikti aritmetinius, mokslinius ar finansinius skaičiavimus
Comment[lv]=Veikt aritmētiskus, zinātniskus vai finansiālus aprēķinus
Comment[mjw]=Perform arithmetic, scientific or financial calculations
Comment[mk]=Извршете аритметички, научни или финансиски пресметки
Comment[ml]=അരിതമെറ്റിക്, ശാസ്ത്രീയം അല്ലെങ്കില്‍ ധനകാര്യ സംബന്ധമായ കണക്കുകൂട്ടലുകള്‍ നടത്തുക
Comment[mr]=अंकगणित, शास्त्रीय किंवा वित्तीय गणना चालवून पहा
Comment[ms]=Buat pengiraan aritmatik, saintifik dan kewangan
Comment[nb]=Utfør aritmetiske, vitenskapelige eller finansielle utregninger
Comment[ne]=अंकगणितीय, वैज्ञानिक वा आर्थिक गणनाहरू कार्यसम्पादन गर्नुहोस्
Comment[nl]=Voer rekenkundige, wetenschappelijke of financiële berekeningen uit
Comment[nn]=Utfør aritmetiske, vitskaplege eller finansielle utregningar
Comment[oc]=Efectua de calculs aritmetics, scientifics o financièrs
Comment[or]=ଗାଣିତିକ,ବୈଜ୍ଞାନିକ କିମ୍ବା ଆର୍ଥିକ ହିସାବ କରନ୍ତୁ
Comment[pa]=ਗਣਿਤ, ਵਿਗਿਆਨਕ ਜਾਂ ਵਿੱਤੀ ਗਣਨਾ ਕਰੋ
Comment[pl]=Wykonanie obliczeń arytmetycznych, naukowych lub finansowych
Comment[pt_BR]=Efetue cálculos aritméticos, científicos ou financeiros
Comment[pt]=Realize cálculos aritméticos, científicos ou financeiros
Comment[ro]=Efectuează calcule aritmetice, științifice și financiare
Comment[ru]=Вычисления: арифметические, научные и финансовые
Comment[sk]=Vykonáva aritmetické, vedecké alebo finančné výpočty
Comment[sl]=Izvajanje aritmetičnih, znanstvenih ali finančnih izračunov
Comment[sq]=Kryen llogari aritmetikore, shkencore ose financiare
Comment[sr@latin]=Izvršavajte aritmetičke, naučne ili finansijske proračune
Comment[sr]=Извршавајте аритметичке, научне или финансијске прорачуне
Comment[sv]=Utför aritmetiska, vetenskapliga eller finansiella beräkningar
Comment[ta]=கணித, அறிவியல் அல்லது பொருளாதார கணக்குகளை செய்கிறது.
Comment[te]=బీజీయ, శాస్త్రీయ లేదా ఆర్ధిక గణనలను ప్రదర్శించు
Comment[tg]=Иҷрои ҳисобҳои арифметикӣ, илмӣ ё молиявӣ
Comment[th]=คำนวณเลขคณิต ฟังก์ชันวิทยาศาสตร์ หรือการเงิน
Comment[tr]=Aritmetik, bilimsel ve finansal hesaplamalar gerçekleştirir
Comment[ug]=ئارىفمېتىكىلىق، ئىلمىي ياكى ئىقتىسادىي ھېساباتلارنى ئېلىپ بېرىش پروگراممىسى
Comment[uk]=Виконання арифметичних, наукових або фінансових розрахунків
Comment[vi]=Chạy phép tính kiểu số học, khoa học hay tài chính
Comment[zh_CN]=执行算术、科学或财务计算
Comment[zh_HK]=進行數字、科學或金融的計算
Comment[zh_TW]=進行數字、科學或財務計算
Comment=Perform arithmetic, scientific or financial calculations
# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
Keywords[ar]=calculation;arithmetic;scientific;financial;الحسابية;الرياضية;العلمية;المالية;
Keywords[as]=গণনা;গণিতিক;বিজ্ঞানভিত্তিক;আৰ্থিক;
Keywords[be]=calculation;arithmetic;scientific;financial;вылічэнне;разлікі;арыфметыка;навука;фінансы;
Keywords[bg]=калкулатор;аритметични;научни;финансови;изчисления;calculation;arithmetic;scientific;financial;
Keywords[bn_IN]=গণনা;পাটিগণিত;বৈঞ্জানিক;অার্থিক;
Keywords[bs]=raču;aritmetika;naučni;finansijski;
Keywords[ca]=càlcul;aritmètic;científic;financer;
Keywords[ca@valencia]=càlcul;aritmètic;científic;financer;
Keywords[cs]=kalkulace;výpočty;vědecká;finanční;
Keywords[da]=udregning;aritmetik;videnskabelig;finansiel;regning;lommeregner;matematik;
Keywords[de]=Taschenrechner;Rechner;Arithmetisch;Wissenschaftlich;Finanztechnisch;
Keywords[el]=υπολογισμός;αριθμητικός;επιστημονικός;οικονομικός;calculation;arithmetic;scientific;financial;
Keywords[en_GB]=calculation;arithmetic;scientific;financial;
Keywords[eo]=kalkulilo;kalkuli;aritmetiko;scienca;financa;
Keywords[es]=cálculo;aritmética;científica;financiera;
Keywords[et]=arvutamine;arvutused;kalkuleerimine;kalkulaator;aritmeetika;teaduslik;finants;
Keywords[eu]=kalkulua;aritmetikoa;zientifikoa;finantzarioa;
Keywords[fa]=محاسبه;ریاضی;علمی;مالی;
Keywords[fi]=calculation;arithmetic;scientific;financial;laskenta;laskut;laskutoimitus;aritmetiikka;aritmeettinen;tieteellinen;tiede;talous;talouslaskut;
Keywords[fo]=útrokning;talfrøði;vísindaligur;fíggjarligur;rokning;lummaroknari;støddfrøði;
Keywords[fr]=calcul;arithmétique;scientifique;finances;financier;
Keywords[fur]=calcui;calcoladorie;aritmetic;sientific;finanziari;
Keywords[gd]=cunntadh;àireamhachadh;àireamhachd;saidheans;saidheansail;ionmhas;ionmhais;
Keywords[gl]=calculo;aritmético;científico;financeiro;
Keywords[gu]=ગણતરી;ગાણિતીક;વૈજ્ઞાનિક;આર્થિક;
Keywords[he]=חישוב;חשבון;מחשבון;מדעי;פיננסי;
Keywords[hi]=गणना;अंकगणित;वैज्ञानिक;वित्तीय;
Keywords[hr]=izračuni;aritmetika;znanost;financije;
Keywords[hu]=számítás;aritmetikai;tudományos;pénzügyi;
Keywords[id]=kalkulasi;aritmetik;ilmiah;keuangan;
Keywords[it]=calcolo;calcolatrice;aritmetica;scientifica;finanziaria;
Keywords[ja]=calculation;arithmetic;scientific;financial;算術;科学;財務;calculator;計算機;
Keywords[ka]=გაანგარიშება;მათემატიკა;არითმეტიკა;სამეცნიერო;
Keywords[kk]=calculation;arithmetic;scientific;financial;есептеу;калькулятор;арифметика;ғылыми;қаржылық;
Keywords[km]=អនុវត្ត​; ការ​គណនា​គណិតវិទ្យា; វិទ្យាសាស្ត្រ; ​ហិរញ្ញវត្ថុ;
Keywords[kn]=ಲೆಕ್ಕಾಚಾರ;ಅರಿತ್‌ಮೆಟಿಕ್;ವೈಜ್ಞಾನಿಕ;ಹಣಕಾಸು;
Keywords[ko]=calculation;계산;계산기;arithmetic;연산;scientific;과학;공학;financial;재무;
Keywords[lt]=skaičiavimai;aritmetika;moksliniai;finansiniai;
Keywords[lv]=aprēķins;aritmētika;zinātnisks;finansiāls;
Keywords[mjw]=calculation;arithmetic;scientific;financial;
Keywords[ml]=calculation;arithmetic;scientific;financial;
Keywords[mr]=कॅलक्युलेशन;अरिथमेटिक;साइंटिफिक;फाइनँशिअल;
Keywords[ms]=pengiraan;aritmatik;saintifik;kewangan;
Keywords[nb]=regning;aritmetikk,vitenskapelig;finans;
Keywords[ne]=अंकगणितीय;वैज्ञानिक;आर्थिक;गणनाहरू;
Keywords[nl]=calculation;arithmetic;scientific;financial;rekenkundig;wetenschappelijk;financieel;
Keywords[oc]=calcul;aritmetic;scientific;finances;financièr;
Keywords[or]=ହିସାବ;ଗାଣିତିକ;ବୈଜ୍ଞାନିକ;ଆର୍ଥିକ;
Keywords[pa]=ਗਣਨਾ;ਗਿਣਤੀ;ਹਿਸਾਬ;ਵਿਗਿਆਨਕ;ਵਿੱਤ;ਵਿੱਤੀ;
Keywords[pl]=obliczenia;liczenie;arytmetyczne;naukowe;finansowe;
Keywords[pt_BR]=cálculo;cálculos;aritmético;científico;científica;financeiro;financeira;aritmética;
Keywords[pt]=calcular;aritmética;científica;financeira;
Keywords[ro]=calculation;arithmetic;scientific;financial;calculare;aritmetic;științific;financiar;calculator;
Keywords[ru]=вычисление;арифметические;научные;финансовые;
Keywords[sk]=výpočty;aritmetické;vedecké;finančné;
Keywords[sl]=računanje;izračunavanje;aritmetika;znanstveni izračuni;finančni izračuni;računalo;kalkulator;abakus;
Keywords[sr@latin]=računanje;aritmetika;nauka;finansije;proračun;
Keywords[sr]=рачунање;аритметика;наука;финансије;прорачун;
Keywords[sv]=uträkning;aritmetik;vetenskaplig;finansiell;
Keywords[ta]=கணக்கிடுதல்;கணிதம்; அறிவியல்;பொருளாதாரம்;
Keywords[te]=calculation;arithmetic;scientific;financial;
Keywords[tg]=ҳисобкунӣ;арифметикӣ;илмӣ;молиявӣ;
Keywords[th]=คำนวณ;คิดเลข;เลขคณิต;วิทยาศาสตร์;การเงิน;
Keywords[tr]=calculator;calculation;arithmetic;scientific;financial;hesaplama;aritmetik;bilimsel;finansal;
Keywords[ug]=calculation;arithmetic;scientific;financial;ھېسابلاش;
Keywords[uk]=калькулятор;арифметика;науковий;фінансовий;
Keywords[vi]=calculation;arithmetic;scientific;financial;bàn;tính;ban;tinh;toán;tài;chính;tai;chinh;khoa;học;hoc;
Keywords[zh_CN]=calculation;arithmetic;scientific;financial;计算;算术;科学;财务;
Keywords[zh_HK]=calculation;arithmetic;scientific;financial;科學;金融;計算;
Keywords[zh_TW]=calculation;arithmetic;scientific;financial;科學;金融;財務;計算;計算機;數字;數學;算數;算術;程式設計;單位轉換;轉換;
Keywords=calculation;arithmetic;scientific;financial;
Exec=true %U
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=org.gnome.Calculator
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Utility;Calculator;
X-Purism-FormFactor=Workstation;Mobile;

View File

@@ -2746,9 +2746,9 @@ test_measure (void)
g_assert_true (ok);
g_assert_no_error (error);
g_assert_cmpuint (num_bytes, ==, 74469);
g_assert_cmpuint (num_bytes, ==, 96702);
g_assert_cmpuint (num_dirs, ==, 6);
g_assert_cmpuint (num_files, ==, 32);
g_assert_cmpuint (num_files, ==, 34);
g_object_unref (file);
g_free (path);
@@ -2829,9 +2829,9 @@ test_measure_async (void)
file = g_file_new_for_path (path);
g_free (path);
data->expected_bytes = 74469;
data->expected_bytes = 96702;
data->expected_dirs = 6;
data->expected_files = 32;
data->expected_files = 34;
g_file_measure_disk_usage_async (file,
G_FILE_MEASURE_APPARENT_SIZE,